ModuleNotFoundError: 找不到名为'x'的模块
我真的快要抓狂了,尝试了很多解决办法,包括使用一个 setup.py
文件,把相对导入改成绝对导入,或者反过来,重新整理包的结构,确保每个包都有一个 __init__.py 文件,还有更多的尝试。任何帮助都非常感谢。我已经把我的项目简化如下。
我的项目结构如下:
myProject
|
|__ src
|
|__ foo
| - __init__.py
| |
| |__ bar
| - __init__.py
| |
| |__ baz
| - __init__.py
| - baz_functions.py
| - baz_watch.py
|
| - __init__.py
| - project_code.py
| - main.py
关于文件:
main.py
import project_code
if __name__ == '__main__':
project_code.run()
project_code.py
import foo.bar.baz.baz_functions
def run():
print('Hello World!')
baz_watch.py
from baz_functions import function_1, function_2
print('Watching...')
baz_functions.py
def function_1():
print('I am function 1')
def function_2():
print('I am function 2')
当然,如果在 project_code.py
中不写 import foo.bar.baz.baz_functions
,代码就能正常运行。
我遇到的错误是:
Traceback (most recent call last):
File "C:\xxx\xxx\xxx\myProject\src\main.py", line 1, in <module>
import project_code
File "C:\xxx\xxx\xxx\myProject\src\project_code.py", line 1, in <module>
import foo.bar.baz.baz_functions
File "C:\xxx\xxx\xxx\myProject\src\foo\bar\baz\baz_watch.py", line 1, in <module>
from baz_functions import function_1, function_2
ModuleNotFoundError: No module named 'baz_functions'
2 个回答
1
在你的 baz_watch.py
文件中,你需要使用相对导入来引入 baz_functions
(在模块名前加上 .
)。这样做的意思是告诉 Python 在和 baz_watch.py
文件同一个文件夹里找这个模块。否则,Python 可能会在你的 Python 路径中寻找这个包,从而导致错误。下面是修改后的代码。
from .baz_functions import function_1, function_2
print('Watching...')
1
baz_functions
不是一个顶层模块;它属于包 foo.bar.baz
,所以如果要使用绝对导入,就必须这样导入。
相对导入可以使用 .
来引用与导入模块在同一个包中的模块:
from .baz_functions import function1, function2