我有以下带有2个moludes的Python包:
-pack1
|-__init__
|-mod1.py
|-mod2.py
-import_test.py
代码:
# in mod1.py
a = 1
和
# in mod2.py
from mod1 import a
b = 2
和CCD_ 1代码:
# in __init__.py
__all__ = ['mod1', 'mod2']
接下来,我正在尝试导入包:
# in import_test.py
from pack1 import *
但我得到了一个错误:
ModuleNotFoundError:没有名为"mod1"的模块
如果我删除依赖项";从mod1导入一个";在mod2.py中,导入操作正常。但这种依赖关系使导入不正确,出现了"异常";ModuleNotFoundError";。
这里的问题是,从mod2
的角度来看,它将在其中搜索模块的第一个级别是在您导入模块的路径中(这里我假设pack1不在PYTHONPATH中,并且您从包含pack1
的同一目录中导入它(。
这意味着,如果pack1
在目录/dir/to/pack1
中,并且您执行了:
from mod1 import a
Python将在与pack1
相同的目录中查找mod1
,即/dir/to/pack1
。
要解决您的问题,只需执行以下任一操作即可:
from pack1.mod1 import a
或Python 3.5+
from .mod1 import a
顺便说一句,除非这对您来说是必须的,否则我不建议将您的包设计为用作
from pack import *
,即使__init__
0的存在可以让您更好地控制公共API。