我有一个叫analysis的包裹。
当我导入这个包(使用命令from app import analysis)时,由于缺少一个应该导入到另一个包(web_package)中的库,所以我得到了一个ImportError异常。
即使没有安装库,我也希望能够导入analysis,因为analysis只是从web_package导入功能,即使没有库也可以工作。
analysis/__init__.py
from app.analysis.util import some_functionanalysis/util.py:
from app.web_package.util import some_other_functionweb_package/__init__.py:
from app.web_package.web_client import SomeClassweb_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。我能做什么?
将from missing_library import ParentClass封装到try/except块将导致def SomeClass(ParentClass)出错。
发布于 2015-09-05 13:59:04
我认为最简单的方法是将代码重构为两个不同的模块。
一个模块有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` ?发布于 2015-09-05 14:04:27
可以在except子句中定义存根。以下工作:
try:
from foo import bar;
except:
class foo:
pass
class baz(foo):
pass这是相当糟糕的设计,虽然,伊莫,但这是相当固执的。
https://stackoverflow.com/questions/32413276
复制相似问题