我有一个名为 backup-tool
(虚构的)的实用程序。这有一个直接的依赖
在名为 security-utils
的第三方库上(再次虚构)。还有这个
依赖依赖于 cryptography
(真正的依赖)。所以,
backup-tool
具有对 cryptography
的传递依赖。没有特别的
backup-tool
和 security-utils
都不需要版本。
现在我有两台服务器:一台运行 Linux,另一台运行 FreeBSD。我创建一个
Linux 上的虚拟环境并在其下运行 pip install backup-tool
。
一切正常。
在 FreeBSD 上,可以安装 2.9.2 版本的 cryptography
,无需任何安装
问题。但是,其他版本会导致构建失败。 (解决方法可能是
找到了,当然,但这不是重点。)
现在我设置了一个虚拟环境并使用 pip install cryptography==2.9.2
预安装了正确的版本。稍后——这一切都是在一个自动化的
管道,我不能加入这两个步骤 - 我的工具是使用 pip install backup-tool
安装的。对 cryptography
的瞬态依赖解析为
3.x 版,它不起作用。
但是,如果我在单个
步骤,一切正常。这意味着 pip install backup-tool cryptography==2.9.2
与
backup-tool
在 2.9.2 版本中。
我的问题:是否可以在虚拟环境中提示 pip
不应安装其他版本的 cryptography
(如果已安装)
依赖树也可以解析为匹配版本
已安装,但选择了最新版本。
我可以进一步指定(瞬态)依赖项 cryptography
cryptography==2.9.2
或 requirements.txt
的 setup.py
。但由于这是一个
环境而不是软件约束,这对大多数人来说是无用的限制
设置。
答案 0 :(得分:2)
您可以使用 constraints file 来限制安装软件包时 pip 应尝试的软件包版本范围。语法是需求文件的语法。
例如constraints.txt
:
cryptography==2.9.2
为了让 pip 始终读取此约束文件,您可以设置环境变量:
export PIP_CONSTRAINT=constraints.txt
或者,在虚拟环境下,在 $VIRTUAL_ENV/pip.conf
创建配置:
[install]
constraint = constraints.txt
(路径相对于您的应用根目录)