Python:从..导入包时出现问题..使用__all__和__init__导入*



我有以下带有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。

相关内容

  • 没有找到相关文章

最新更新