我正在使用require.txt来指定我的python应用程序中使用的软件包依赖关系。对于没有内部依赖性的软件包或使用尚未安装的软件包依赖性的软件包,一切似乎都可以正常工作。
当我尝试安装对某些其他软件包具有嵌套依赖项的软件包并且已经安装了该软件包的较早版本时,会发生此问题。
我知道在使用pip install -U --no-deps <package_name>
手动安装软件包时可以避免这种情况。我想了解如何使用require.txt进行此操作,因为部署和需求安装是一个自动化过程。
注意:
已经安装的软件包不是我在项目中直接使用的软件包,而是同一服务器上不同项目的一部分。
谢谢。
答案 0 :(得分:2)
依赖性解析是一个相当复杂的问题。 Requirements.txt只是使用可选的版本范围指定了您的依赖项。如果要“锁定”传递依赖关系(依赖关系的依赖关系),则必须生成一个requirements.txt,其中包含安装的每个软件包的确切版本,例如pip freeze
。这并不能解决问题,但至少会在依赖项冲突的安装上向您指出,以便您可以手动选择正确的版本。
话虽这么说,用于管理应用程序依存关系的正式支持的新工具(截至撰写时)为Pipenv。此工具将为您管理传递依赖项的确切版本(因此您不必手动维护“ requirements.txt”),并且它将代码所需的包与系统的其余部分隔离开。 (它使用引擎盖下的virtualenv工具执行此操作)。这种隔离应该可以解决因断开同一项目而导致的问题,因为您的项目可以具有与系统其余部分不同的库版本。
(TL; DR尝试使用Pipenv,看看您的问题是否刚刚消失)