How can I solve this cannot ImportError: cannot import name in python3

How can I solve this cannot ImportError: cannot import name in python3

参考资料库 --> https://github.com/SavSanta/bluinfo

因此,我正在尝试导入我在名为 bluinfo.py 的文件中创建的 class BDROM。 (第 27 行)

通过将行 from bluinfo import BDROM 添加到 bluinfo-gui.py(第 8 行)

我正在接收ImportError: cannot import name 'BDROM'

我不知道如何让这个坏小子工作。其他帖子指出它可能与 PYTHONPATH 有关(尽管类似的导入在程序的其他部分一直有效并且所有文件都在同一目录中)。


我尝试通过以下方式更改导入语句但没有成功:

  1. 从 .bluinfo 导入 BDROM
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named '__main__.bluinfo'; '__main__' is not a package
  1. 从 ..bluinfo 导入 BDROM
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: attempted relative import beyond top-level package
  1. 创建一个 init.py 文件(我相信我在 python3.x 中阅读它是不必要的)并尝试导入
$dev:/tmp/blue/bluinfo$ touch __init__.py
$dev:/tmp/blue/bluinfo$ python3 bluinfo-gui.py 
Traceback (most recent call last):
  File "bluinfo-gui.py", line 8, in <module>
    from bluinfo import BDROM
  File "/tmp/blue/bluinfo/bluinfo.py", line 8, in <module>
    import ts_scanner as ScanTask
  File "/tmp/blue/bluinfo/ts_scanner.py", line 5, in <module>
    import ts_streamtypeclass
  File "/tmp/blue/bluinfo/ts_streamtypeclass.py", line 3, in <module>
    from bluinfo import BDROM
ImportError: cannot import name 'BDROM'

任何想法表示赞赏!

在您的第三次尝试中,您进行了循环导入。重构您的代码以避免这种情况。

例如,您可以消除其中一个导入,从而摆脱循环依赖。

  File "/tmp/blue/bluinfo/bluinfo.py", line 8, in <module>
    import ts_scanner as ScanTask

  File "/tmp/blue/bluinfo/ts_streamtypeclass.py", line 3, in <module>
    from bluinfo import BDROM

PS:由于您在名为 blueinfo 的目录中有一个名为 blueinfo.py 的文件,因此语句 import blueinfo 可能表示包(目录)或模块(文件)。您可以考虑将 blueinfo 目录中的文件重命名为更具描述性的名称,以避免这种歧义。