setuptools“至少有一个”依赖规范

时间:2010-01-07 21:44:24

标签: python dependencies setuptools

在某些情况下,有各种模块,每个模块都实现一个通用的API(在我的例子中,旧的纯python elementtreecElementTreelxml.etree和内置的xml.etree)。我可以使用ElementTree编写模块来尝试这些选项中的每一个,并根据我自己的首选顺序获取第一个存在的模块 - 但是我找不到任何关于指定其中只有一个必须是安装在setup.py。我想写一些看起来像这样的东西:

setup(
    ...,
    install_requires="""
        elementtree | cElementTree | lxml
    """,
    ...
)

这可能是类似的吗?

2 个答案:

答案 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包安装为依赖项。