python 个包的版本管理

Versions management of python packages

管理不同版本包的最佳做法是什么? 我知道 virtualenv 但我不确定它是否适合我的情况。

我的问题:

假设我有 2 个项目(P1、P2),它们都使用 1 个小项目(P3)。 我使用 git 个子模块并将 P3 添加到 P1 和 P2。

然后我有使用上述所有项目的 P4,P4 需要最新版本的 P3。

如何处理? 我想让 P1、P2、P4 使用他们自己的 P3 版本。但是当我构建 P4 时,我只有一个版本的 P3。

项目结构:

所有项目都是这样的结构(部分文件省略):

P4 例子:

├── project_name (sources are here)
├── Makefile
├── submodules
│   └── P1
│       ├── submodules
│       │   └── P3
│   └── P2
│       ├── submodules
│       │   └── P3
│   └── P3
├── tests
└── setup.py

如何导入子项目:

这并不奇怪,所有项目都以这种方式导入 P3,因为它是唯一安装的版本。

所以 P1 使用: from P3 import something

而P4也使用:

from P3 import something

from P1 import something_else

Virtualenv 会起作用,为什么你认为它不起作用?

一般规则是不支持在单个 Python 环境中 运行 同一项目的多个版本。显然(就像软件中的任何其他类型的限制一样)有很多方法可以绕过它,但它们都需要相当多的工作。

根据我从这个特定问题中收集到的信息,我相信 vendoring 可能是规避此限制的合适技术,同时需要对当前状态进行尽可能少的修改项目。

1.带有 git 个子模块

  • P3 保存在不同的 git 存储库中。
  • 使用git子模块在主项目中有两个不同的P3副本。

2。使用销售工具


What is a best practice to manage a different versions of packages? I know about virtualenv but i am not sure it is suitable in my case.

不是。例如,虚拟环境可以帮助使用同一个库的两个不同版本来处理两个不同的项目。但是这两个项目需要存在于两个不同的虚拟环境中。所以你不能让一个项目同时从同一个库的两个不同版本导入。