仅需要需求文件中的两个依赖项之一

Or *_*r B 5 python pip python-2.7 requirements.txt

某些 Python 包需要两个包之一作为依赖项。例如,Ghost.py需要PySidePyQt4

是否可以在requirements.txt文件中包含这样的依赖项?是否有任何“或”运算符可以处理这些文件?

如果没有,我该怎么做才能将这些要求添加到文件中,以便只安装其中之一?

Flo*_*ker 4

目前,piprequirement.txt和 setuptools 都不允许直接进行这样的构造。两者都要求您指定要求列表。您可以限制需求的版本,但仅此而已。

在 Python 中,您可以按如下方式处理这种情况:

try:
    import dependency1

    def do_it(x):
        return dependency1.some_function(x)
except ImportError:
    try:
        import dependency2

        def do_it(x)
            return dependency2.another_function(x)
    except ImportError:
        raise ImportError('You must install either dependency1 or '
                          + 'dependecy2!')
Run Code Online (Sandbox Code Playgroud)

现在do_it使用 或dependency1.some_functiondependency2.another_function具体取决于哪个可用。

这仍然会给您留下如何指定您的需求的问题。我看到两个选择:

  1. 不要在文件中正式指定要求requirements.txtsetup.py记录用户需要安装依赖项之一。如果您的软件设置无论如何都需要额外的手动步骤(即不仅仅是pip install my_tool),那么这种方法可能没问题。
  2. 将您的首选需求硬编码到requirements.txt或中setup.py

最后,您必须问自己为什么人们可能想要使用一种依赖项而不是另一种依赖项:我通常不太关心我使用的库的依赖项,因为(磁盘)空间很便宜并且(由于 virtualenv )不兼容的风险很小。因此,我什至建议您考虑不支持相同功能的两个不同依赖项。