2

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

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

这是可能的吗?

4

2 回答 2

0

我不这么认为,但是,如果您使用的是相当新的 Python,elementtree作为标准 Python 库的一部分,您为什么担心它可能不存在?(我确实理解这对于 API 的几种可能实现的其他情况会是一个问题,我只是想知道您是否真的需要它来满足您的特定用例)。

于 2010-01-08T00:20:56.053 回答
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 包作为依赖项。

于 2010-01-08T00:53:08.857 回答