从requirement.txt安装新程序包,而不升级已满足的依赖项



我使用requirement.txt来指定python应用程序中使用的包依赖项。对于没有内部依赖项的程序包,或者对于使用尚未安装的程序包依赖项的软件包,一切似乎都很好。

当我尝试安装一个与其他程序包有嵌套依赖关系的程序包,并且已经安装了该程序包的旧版本时,就会出现此问题。

我知道在使用pip install -U --no-deps <package_name>手动安装软件包时可以避免这种情况。我想了解如何使用requirement.txt来实现这一点,因为部署和需求安装是一个自动化的过程。

注意:

已经安装的软件包不是我在项目中直接使用的,而是同一服务器上不同项目的一部分。

提前谢谢。

依赖关系解析是一个相当复杂的问题。requirements.txt只是用可选的版本范围指定依赖项。如果你想"锁定"你的可传递依赖项(依赖项的依赖项(,你必须生成一个requirements.txt,其中包含你用pip freeze之类的东西安装的每个包的确切版本。这并不能解决问题,但它至少会在安装时向您指出哪些依赖项冲突,以便您可以手动选择正确的版本。

也就是说,新的(截至本文撰写之时(官方支持的用于管理应用程序依赖关系的工具是Pipenv。该工具将为您管理可传递依赖项的确切版本(因此您不必手动维护"requirements.txt"(,并将代码所需的包与系统的其他部分隔离开来。(它使用引擎盖下的virtualenv工具来完成此操作(。这种隔离应该可以解决破坏共有项目的问题,因为您的项目可能具有与系统其他部分不同的库版本。

(TL;DR尝试使用Pipenv,看看您的问题是否刚刚消失(

相关内容

最新更新