ModuleNotFoundError: 找不到名为'x'的模块

1 投票
2 回答
41 浏览
提问于 2025-04-12 23:02

我真的快要抓狂了,尝试了很多解决办法,包括使用一个 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

撰写回答