我有一个名为analysis
的包。
当我导入此包(使用命令from app importanalysis
)时,我收到一个ImportError
异常,因为缺少应该在另一个包中导入的库(web_package
)。
即使我没有安装该库,我也希望能够导入 analysis
,因为 analysis
仅从 web_package
导入函数即使没有库也可以工作。
分析/__init__.py:
from app.analysis.util import some_function
分析/util.py:
from app.web_package.util import some_other_function
web_package/__init__.py:
from app.web_package.web_client import SomeClass
web_package/web_client.py:
from missing_library import ParentClass
def SomeClass(ParentClass):
此时,如果我没有安装 missing_library
,但我仍然想使用 web_package/util.py
中的一些函数,我该怎么办?每当我尝试从 app.web_package.util
导入某些内容时,它会自动进入 web_package/__init__.py
,然后进入 web_client.py
,导致引发 ImportError
。我能做什么?
将 frommissing_library import ParentClass
包装到 try/except
block 中将导致 def SomeClass(ParentClass)
出错。
最佳答案
我想说最简单的方法是将代码重构为两个不同的模块。
一个模块具有 missing_library
导入,并且只有依赖于此 missing_library
的代码,例如 SomeClass
,然后另一个模块具有以下功能,您想要使用的,不依赖于缺少的库的。
然后,如果您想在依赖模块中使用其中一些独立函数,您只需在其中导入该模块即可。
然后在您的 __init__.py
中,您可以放置 try/except
示例 -
try:
from app.web_package.web_client import SomeClass
except ImportError:
pass #Or import some other version of `SomeClass` ?
关于python - 从具有依赖关系的模块导入函数而不引发 ImportErrors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32413276/