在某些情况下,有各种模块,每个模块都实现一个通用的API(在我的例子中,旧的纯python elementtree
,cElementTree
,lxml.etree
和内置的xml.etree
)。我可以使用ElementTree
编写模块来尝试这些选项中的每一个,并根据我自己的首选顺序获取第一个存在的模块 - 但是我找不到任何关于指定其中只有一个必须是安装在setup.py
。我想写一些看起来像这样的东西:
setup(
...,
install_requires="""
elementtree | cElementTree | lxml
""",
...
)
这可能是类似的吗?
答案 0 :(得分:0)
我不这么认为,但是,如果你使用了一个相当新的Python,elementtree
是标准Python库的一部分,为什么你担心它可能不存在? (我确实理解这对于API的几种可能实现的其他情况会有问题,我只是想知道你是否真的需要它用于你的特定用例)。
答案 1 :(得分:0)
您可能想尝试在setup.py中执行类似的操作:
install_requires = ["elementree"]
try:
import cElementTree
install_requires = []
except ImportError:
try:
import lxml
install_requires = []
except ImportError:
# etc for remaining equivalent modules
setup(
install_requires = install_requires,
# rest of setup parameters
)
如果没有安装等效项,这将基本上将elementree包安装为依赖项。