我试图从多个位置导入模块,但无法使其工作,因为Python3中的相对导入已被禁用。我想这样做,以便用户可以复制package_1并在终端上运行它(使用主类);而另一个类被导入到作为web应用程序前端的scriptb.py中。从多个位置导入模块时python3相对导入
-- 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 导入错误以下错误:没有模块名为“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
以下仅作品主:
if __name__ == '__main__':
from package_1.core.module1 import classname:
except ImportError:
from .package_1.core.module2 import classname
感谢您的回复。所有的软件包都有__init__.py文件。我将编辑帖子,因为我忘了输入它们。 – budge
该死的,我不能使用“if __name__ =='__main__':”在子包内,因为它们不被称为主程序,所以我仍然这样做有同样的问题。假设我必须捕获ImportError异常.. – budge