ModuleNotFoundError: No module named, but file nested within module

ModuleNotFoundError: No module named, but file nested within module

我对 Python 中的模块有疑问。

使用 VSCode 我设置了以下简单代码:

Demo/
    Test.py
    z1/
        \_\_init\_\_.py
        Foo.py
        z2/
            \_\_init\_\_.py
            Screen.py

screen.py 包含:

class Screen:
SCREEN_SIZE = [800, 600]

和z2/__init__.py

from  z1.z2.Screen import *

并且下面的 Foo.py 和 Test.py 都有:

from z1.z2.Screen import *
print(Screen.SCREEN_SIZE)

为什么当我 运行 Test.py 时,我得到:

[800, 600]

但是当我 运行 Foo.py 时,我得到:

File "***\Python\z1\Foo.py", line 1, in <module>
    from z1.z2 import *
ModuleNotFoundError: No module named 'z1'

我可以将 __init__.py 中的 z1.z2 更改为 z2,但是 Test.py 不起作用。 有什么办法让它对两个文件都有效吗?

我个人不喜欢 Python 的导入系统。当运行Foo.py你能导入使用from z2.Screen import *成功吗?

我(不幸的是)也使用以下代码来处理测试代码

try:
    from x.y import z
except ImportError:
    from y import z

但我想您也可以使用 os.path 将根路径添加到 Foo.py。在 Foo.py 中,您可以尝试添加

import sys

sys.path.append('../')

您似乎没有使用虚拟环境,这导致文件 运行 独立排序。

照原样,您正尝试在 Foo.py 中导入 z1,但 Foo.py 只能看到一个名为 z2 的子文件夹。将 Foo.py 中的导入语句更改为 from z2.Screen import * 暂时解决了这个问题。

如果使用虚拟环境,那么您必须使用 import 就好像文件位于主目录中一样。

作为旁注,this might give some better insight to using _init_.py