真的束手无策,尝试了多种解决方案,包括使用
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')
当然,如果没有
import foo.bar.baz.baz_functions
中的:project_code.py
,代码运行得很好。
我得到的错误是:
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'
baz_functions
不是顶级模块;它位于包 foo.bar.baz
中,并且使用 absolute 导入,必须这样导入。
relative导入可以使用
.
来引用与导入模块位于同一包中的模块:
from .baz_functions import function1, function2