首页 > 解决方案 > ModuleNotFoundError:没有命名模块,但文件嵌套在模块中

问题描述

我对 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 不起作用。有什么办法让它对这两个文件都有效吗?

标签: pythonmodulenested

解决方案


我个人不喜欢 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('../')

推荐阅读