我尝试阅读其他类似的问题,但答案对我不起作用,例如Python submodule imports using __init__.py和module has no attribute
我有一个像这样的文件夹结构:
python_scripts
├── lib
│ ├── __init__.py # import lib.talk
│ └── talk.py # def sayhello(x): print(x)
│
├── src
│ ├── __init__.py # import lib.talk
│ └── data
│ ├── __init__.py # import lib.talk
│ └── main.py # from lib.talk import sayhello
│ sayhello('hi')
│
└── __init__.py # import lib.talk
这会引发错误:
Traceback (most recent call last):
File "main.py", line 1, in <module>
from lib.talk import sayhello
ModuleNotFoundError: No module named 'lib.talk'
奇怪的是,如果我只是在main.py中'导入lib'就没有错误。我该怎么解决这个问题?
我正在使用Windows,我非常希望避免使用sys.path方法,因为我们不想对路径进行硬编码(将来可能会被其他团队使用)。
答案 0 :(得分:3)
在main.py
文件中,在顶部添加以下内容。
import sys
path = r'{path_to_python_scripts}'
if path not in sys.path:
sys.path.append(path)
# Now import
import lib
或
import sys, os
path = os.path.abspath('../..')
if path not in sys.path:
sys.path.append(path)
# Now import
import lib
答案 1 :(得分:0)
使用from ...lib import talk
。由于import lib.talk
字典中的__init__.py
,因为lib是一个包,因此lib
无法正常工作。
你也可以使用path
追加方式,但你需要得到这样的东西:
import os, sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'libs')))
这样,无论您的Python代码存储在何处,都会动态地将路径追加到库中。