setuptools "至少一个" 依赖规范
在某些情况下,有很多模块都实现了一个共同的接口(比如我这里提到的,老版的纯Python的 elementtree
、cElementTree
、lxml.etree
和内置的 xml.etree
)。我可以用 ElementTree
来写一个模块,尝试这些选项,并根据我自己的偏好顺序选择第一个可用的模块——但是我找不到关于如何在 setup.py
中指定只需要安装其中一个模块的信息。我想写的东西大概是这样的:
setup(
...,
install_requires="""
elementtree | cElementTree | lxml
""",
...
)
这样做,或者类似的方式,是否可行呢?
2 个回答
0
我觉得不太可能,不过如果你用的是比较新的Python版本,elementtree
已经是Python标准库的一部分,那你为什么还担心它可能不存在呢?(我明白在其他情况下,可能会有多个API的实现,这会是个问题,但我只是想知道你在你特定的使用场景中,真的需要它吗?)
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这个包作为依赖。