setuptools "至少一个" 依赖规范

2 投票
2 回答
665 浏览
提问于 2025-04-15 17:46

在某些情况下,有很多模块都实现了一个共同的接口(比如我这里提到的,老版的纯Python的 elementtreecElementTreelxml.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这个包作为依赖。

撰写回答