我试着阅读其他类似的问题,但答案对我没有用,比如.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方法,因为我们不想硬编码路径(这可能会在将来被其他团队使用)。
发布于 2018-04-10 11:31:03
在您的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发布于 2018-04-10 12:37:43
使用from ...lib import talk。您的import lib.talk无法工作,因为lib是一个包,因为__init__.py在lib字典中。您也可以使用path附加方式,但是您需要获得如下内容:
import os, sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'libs')))这样,无论Python代码存储在何处,您都将始终动态地将路径附加到库中。
https://stackoverflow.com/questions/49752378
复制相似问题