【问题标题】:Python any of many dependenciesPython 许多依赖项中的任何一个
【发布时间】:2015-02-13 16:46:52
【问题描述】:

有时我会遇到这样的情况,即我有一个包可以依赖于包 A 或 B。

例如,我的项目依赖于一个名为spam的包,如果这个项目重命名为pyspam,我的项目可以依赖spampyspam

我无法弄清楚(或找到)如何在 setup.py 中定义此类依赖项。解决此问题的普遍接受的方法是什么?

编辑:我想在setup.py 中定义依赖关系。像这样的:

from setuptools import setup

setup(
    name='myproject',
    install_requires=[
        'spam || pyspam'
    ]
)

【问题讨论】:

    标签: python dependency-management setuptools


    【解决方案1】:

    您可以检查该软件包是否可用,并据此决定使用哪个。 (希望我正确理解了您的问题)。

    from setuptools import setup
    
    imp_spam = "spam"
    try:
        import spam
    except:
        imp_spam = "pyspam"
    
    setup(
        name='myproject',
        install_requires=[imp_spam]
    )
    

    【讨论】:

    • 不完全是我想要的。如果两个软件包都没有安装,pyspam 将安装在您的示例中。不幸的是,没有处理任何一个包可能不存在(远程)的场景。在这种情况下,依赖项可以作为后备。这个答案可能在大多数情况下都有效,所以+1。
    • 嗯,您必须将其中之一定义为首选,对吗?只需颠倒顺序以使另一个优先,以防两者都丢失。
    • 如果 pypi 服务器上(尚)不存在包,则安装失败。相反,它应该尝试获取另一个包,因为它也满足依赖关系。
    • 啊,我明白了。那我的回答还不完整。不知道如何实现这一点......
    【解决方案2】:
    try:
        import ham
    except ImportError:
        import spam
    

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多