Python:从…导入包时出现问题。。。使用uuu all和uuu init导入*__

Python:从…导入包时出现问题。。。使用uuu all和uuu init导入*__,python,import,package,Python,Import,Package,我有以下包含2个模块的Python包: -pack1 |-__init__ |-mod1.py |-mod2.py -import_test.py 使用代码: # in mod1.py a = 1 及 以及\uuuu init\uuuu代码: # in __init__.py __all__ = ['mod1', 'mod2'] 接下来,我将尝试导入包: # in import_test.py from pack1 import * 但我有一个错误: ModuleNotFoundE

我有以下包含2个模块的Python包:

-pack1 
|-__init__ 
|-mod1.py 
|-mod2.py
-import_test.py
使用代码:

# in mod1.py
a = 1

以及
\uuuu init\uuuu
代码:

# in __init__.py
__all__ = ['mod1', 'mod2']
接下来,我将尝试导入包:

# in import_test.py
from pack1 import *
但我有一个错误:

ModuleNotFoundError:没有名为“mod1”的模块

如果我在mod2.py中删除依赖项“from mod1 import a”,那么导入将正确进行。但是,这种依赖关系使导入不正确,只有“ModuleNotFoundError”例外


???

这里的问题是,从
mod2
的角度来看,它将搜索模块的第一级位于导入模块的路径中(这里我假设pack1不在PYTHONPATH中,并且您从包含
pack1
的同一目录导入它)

这意味着如果
pack1
位于目录
/dir/to/pack1
中,并且您执行以下操作:

从mod1导入a
Python将在与
pack1
相同的目录中查找
mod1
,即
/dir/to/pack1

要解决您的问题,只需执行以下任一操作即可:

从pack1.mod1导入
或者在Python 3.5中+

from.mod1导入一个
作为补充说明,除非您必须这样做,否则我不建议将您的包设计为作为包导入*中的
,即使存在
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

此解决方案“从pack1.mod1导入a”有效。我想我已经明白出了什么问题。谢谢
# in import_test.py
from pack1 import *