基于 env 变量的 pip requirements.txt 条件或环境标记

gho*_*off 10 python pip requirements.txt

有没有办法在基于环境变量值的 pip requirements.txt 文件中指定条件安装?

我已经能够使用环境标记来控制我需要的大部分内容,但是我所知道的所有标记都只能使用本质上由 Python 预先定义的特定值。

例如,我希望能够控制 RHEL 5.3 vs. RHEL 6.3 vs. RHEL 6.6 等的包安装。也基于其他标准。

如果我可以在 results.txt 文件中指定一个环境变量,该变量将根据我在运行 pip 之前设置的值进行检查,那将是完美的。这似乎是可取的和直接的功能。到目前为止,我还没有找到关于环境标记的全面讨论,所以我希望我刚刚错过了一些关键信息:-)

非常感谢。

mip*_*adi 6

没有真正的方法可以使用环境变量来做到这一点。Pip 需求文件基本上只是文件中列出的pip install参数列表。因此,如果您的需求文件如下所示:

Foo==1.1.0
Bar==0.1.0
Baz==2.0.1
Run Code Online (Sandbox Code Playgroud)

从逻辑上讲,pip 是这样做的:

pip install Foo==1.1.0
pip install Bar==0.1.0
pip install Baz==2.0.1
Run Code Online (Sandbox Code Playgroud)

不幸的是,在这种情况下,无法应用环境变量。

这个问题有几个解决方案。

一,您可以有一个基本需求文件,例如requirements.txt,列出所有平台的通用依赖项。然后,你可以有一个被命名为个性化需求的文件,也就是说,requirements.rhel53.txtrequirements.rhel63.txt,等每个文件的顶部可能有这样的作为第一行:

-r requirements.txt
Run Code Online (Sandbox Code Playgroud)

然后是额外的特殊依赖项列表。然后,在每个环境中,您可以设置一个 env var,让我们调用它$PLATFORM,然后运行这样的命令来安装依赖项:

$ pip install -r requirements.$PLATFORM.txt
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用约束文件。您requirements.txt只需列出没有版本的依赖项:

Foo
Bar
Baz
Run Code Online (Sandbox Code Playgroud)

然后你可以有一个约束文件,同样适用于每个平台,它会列出特定的版本要求。例如,你可以有constraints.rhel53.txt这样的:

Foo==1.1.0
Bar==0.1.0
Baz==2.0.1
Run Code Online (Sandbox Code Playgroud)

再一次,你设置一个环境变量,然后运行这样的命令:

$ pip install -r requirements.txt -c constraints.$PLATFORM.txt
Run Code Online (Sandbox Code Playgroud)

这是一个麻烦的解决方案,但这将是处理它的一种方法。不幸的是,pip 没有本地解决方案。