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