具有冲突依赖项的Python包

具有冲突依赖项的Python包,python,dependencies,pip,virtualenv,pythonpath,Python,Dependencies,Pip,Virtualenv,Pythonpath,我们正在尝试安装几个自己编写的python3应用程序,它们共享一些版本冲突的库 我们目前正在讨论在PYTHONPATH和/或pythonsvirtualenv中使用包的顺序 您将如何处理此问题?对于依赖项隔离和管理,我始终为每个应用程序提供一个VirtualNV。这可以防止应用程序之间的依赖关系冲突问题,如果应用程序的依赖关系中存在依赖关系冲突,任何解决这些冲突的黑客行为都仅限于受影响的环境 此外,每个应用程序都可以独立执行依赖项升级。您可以使用 pipx将完成为每个应用程序设置独立虚拟环境的所

我们正在尝试安装几个自己编写的python3应用程序,它们共享一些版本冲突的库

我们目前正在讨论在PYTHONPATH和/或pythonsvirtualenv中使用包的顺序


您将如何处理此问题?

对于依赖项隔离和管理,我始终为每个应用程序提供一个VirtualNV。这可以防止应用程序之间的依赖关系冲突问题,如果应用程序的依赖关系中存在依赖关系冲突,任何解决这些冲突的黑客行为都仅限于受影响的环境

此外,每个应用程序都可以独立执行依赖项升级。

您可以使用

pipx将完成为每个应用程序设置独立虚拟环境的所有工作,以便所有应用程序的依赖关系保持独立

如果您自己使用virtualenv,则必须切换环境以运行不同的应用程序。pipx为您处理环境,因此您根本不必与VirtualNV打交道

从文档中:

pipx是专门为应用程序安装而设计的,因为它增加了隔离,但仍然使应用程序在shell中可用:pipx为每个应用程序及其相关包创建了一个隔离的环境

旧答案(不再维护pipsi,但pipx的用法几乎相同) 你可以用

pipsi将为每个应用程序设置单独的虚拟环境,以便所有应用程序的依赖关系保持独立

如果您自己使用virtualenv,则必须切换环境以运行不同的应用程序。pipsi为您处理环境,因此您根本不必与VirtualNV打交道

从文档中:

如果要在全局范围内安装用于cli访问的Python包,则 几乎肯定要使用
pipsi
而不是运行
sudopip….
so 你得到的

  • 独立的依赖关系以保证没有版本冲突
  • 不使用sudo全局安装软件包的能力
  • 卸载程序包及其依赖项而不影响 其他全球安装的Python程序

我已经为此挣扎了很久,非常感谢这个答案,但是作为一个更新,已经建议使用pipx,因为pipsi不再维护,所以可能值得更新您的答案。