【发布时间】:2017-02-27 13:29:18
【问题描述】:
我正在尝试从多个位置导入一个模块,但由于 Python3 中的相对导入已被禁用,因此无法使其正常工作。我想这样做,以便用户可以复制 package_1 并在终端上运行它(使用主类);而另一个类被导入到 scriptb.py 中,这是一个 Web 应用程序前端。
-- projectfolder
-- projectfolder/
-- __init__.py
--- package_1/
------ __init__.py
------ subpackage_a/
------ subpackage_a/core/module1.py
------ subpackage_a/__init__.py
------ subpackage_a/core/__init__.py
------ run.py
--- package_2/
----- __init__.py
-- -- scriptb.py
在“package_1/run.py”进口处: 从 subpackage_a.core.module1 导入类名
以下是“package_2/scriptb”导入: package_1.run 导入类名
但是,当我运行 scriptb.py 时,我在 run.py 中收到以下错误 ImportError:没有名为“package_1.core”的模块
Traceback:
File "/directory/package_1/run.py", line 7, in <module>
from subpackage_a.common.exceptions import Classname
ImportError: No module named 'subpackage_a.common'
有没有更好的方法来处理这个问题,然后捕获 ImportError 异常并在所有“package_a”模块中定义两个导入位置?
或者比这样做更好,这意味着每个模块导入两次
if __name__ == '__main__':
from package_1 import classname
else:
from .package_1 import classname
谢谢
编辑:
为了将来参考,我必须在子包中执行此操作以导入核心文件夹中的其他模块
try:
from package_1.core.module1 import classname:
except ImportError:
from ..core.module2 import classname
因为以下仅在 main 中有效:
if __name__ == '__main__':
from package_1.core.module1 import classname:
except ImportError:
from .package_1.core.module2 import classname
【问题讨论】:
标签: python python-3.x python-import relative-path