python包的版本管理

python包的版本管理,python,virtualenv,git-submodules,Python,Virtualenv,Git Submodules,管理不同版本的软件包的最佳实践是什么? 我知道virtualenv,但我不确定它是否适合我的情况 我的问题是: 假设我有两个项目P1和P2,它们都使用一个小项目P3。 我使用git子模块并将P3添加到P1和P2 然后我有P4,它使用上面描述的所有项目,P4需要P3的最新版本 如何处理? 我希望P1、P2、P4使用他们自己的P3版本。但当我构建P4时,我只有一个版本的P3 项目结构: 所有项目都有这样的结构,有些文件省略了: P4示例: ├── 项目名称来源在这里 ├── 生成文件 ├── 子模块

管理不同版本的软件包的最佳实践是什么? 我知道virtualenv,但我不确定它是否适合我的情况

我的问题是: 假设我有两个项目P1和P2,它们都使用一个小项目P3。 我使用git子模块并将P3添加到P1和P2

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

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

项目结构: 所有项目都有这样的结构,有些文件省略了:

P4示例:

├── 项目名称来源在这里 ├── 生成文件 ├── 子模块 │ └── P1 │ ├── 子模块 │ │ └── P3 │ └── P2 │ ├── 子模块 │ │ └── P3 │ └── P3 ├── 测验 └── setup.py 如何导入子项目: 毫无疑问,所有项目都以这种方式导入P3,因为它是唯一安装的版本

因此P1使用: 从P3导入一些东西

P4还使用:

从P3导入一些东西


从P1导入其他东西时,Virtualenv将起作用,为什么您认为它不起作用?

Virtualenv将起作用,为什么您认为它不起作用?

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

从这个特殊问题中我可以得到的信息来看,我相信,在对项目的当前状态进行尽可能少的修改的同时,销售可以是一种合适的技术来规避这个限制

一,。带git子模块

将P3保存在不同的git存储库中。 使用git子模块在主项目中拥有P3的两个不同副本。 二,。使用自动售货机工具

通过完整的打包将P3推广到自己的Python项目。 使用在主项目中有两个不同的P3副本。例如,请参见pip在中如何使用它 管理不同版本的软件包的最佳实践是什么?我知道virtualenv,但我不确定它是否适合我的情况


事实并非如此。例如,虚拟环境可以帮助使用同一库的两个不同版本处理两个不同的项目。但这两个项目需要生活在两个不同的虚拟环境中。因此,不能让一个项目同时从同一个库的两个不同版本导入。

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

从这个特殊问题中我可以得到的信息来看,我相信,在对项目的当前状态进行尽可能少的修改的同时,销售可以是一种合适的技术来规避这个限制

一,。带git子模块

将P3保存在不同的git存储库中。 使用git子模块在主项目中拥有P3的两个不同副本。 二,。使用自动售货机工具

通过完整的打包将P3推广到自己的Python项目。 使用在主项目中有两个不同的P3副本。例如,请参见pip在中如何使用它 管理不同版本的软件包的最佳实践是什么?我知道virtualenv,但我不确定它是否适合我的情况


事实并非如此。例如,虚拟环境可以帮助使用同一库的两个不同版本处理两个不同的项目。但这两个项目需要生活在两个不同的虚拟环境中。因此,您不可能让一个项目同时从同一个库的两个不同版本导入。

那么,我看不出它是如何工作的。当最终项目生成时,虚拟环境只包含一个版本的P3。。。例如,P1需要P3=1.0.0,P2需要P3=2.0.0,P4需要P3=2.0.1如果要安装P3=2.0.1,P1将不工作…运行多个VENV如何?有一个.buildenv、.prodenv等是很正常的。您不仅限于使用一个.venv。那么,我看不出它是如何工作的。当最终项目生成时,虚拟环境只包含一个版本的P3。。。例如,P1需要P3=1.0.0,P2需要P3=2.0.0,P4需要P3=2.0.1如果要安装P3=2.0.1,P1将不工作…运行多个VENV如何?拥有.buildenv、.prodenv等是很正常的。您不仅限于使用单个.venv。您不能在一个Python环境中同时安装单个Python项目的两个不同版本。如果两个项目都依赖于第三个项目,但版本不同,那么目前用Python几乎不可能解决这个问题。这就是问题所在吗
,还是我误解了?一个常用的替代方案是在其他每个项目中使用供应商P3。但既然你在谈论git子模块,我想你已经有点卖东西了,还是我遗漏了什么?@sinoroc,我将P3作为子模块添加到P1、P2和P4中,并在那里使用它。为什么几乎不可能?有什么办法吗?这真的是Python的弱点吗?其他语言如何处理它?抱歉问了这么多问题:是的,很多问题,他们需要的答案与评论不符,而且肯定过于固执己见。让我们继续关注核心问题。。。您是否可以编辑该问题以显示P1的一般目录结构,例如导入P3的P1代码是如何编写的导入…P3。。。声明?@sinoroc,很抱歉回复晚了。我更新了问题。希望这有助于更清楚地理解我的问题。好的,我看不出有什么特别困难的。既然您似乎熟悉git子模块,那就随它去吧。到底是什么阻碍了你继续前进?你不能在一个Python环境中同时安装一个Python项目的两个不同版本。如果两个项目都依赖于第三个项目,但版本不同,那么目前用Python几乎不可能解决这个问题。这就是问题所在,还是我误解了?一个常用的替代方案是在其他每个项目中使用供应商P3。但既然你在谈论git子模块,我想你已经有点卖东西了,还是我遗漏了什么?@sinoroc,我将P3作为子模块添加到P1、P2和P4中,并在那里使用它。为什么几乎不可能?有什么办法吗?这真的是Python的弱点吗?其他语言如何处理它?抱歉问了这么多问题:是的,很多问题,他们需要的答案与评论不符,而且肯定过于固执己见。让我们继续关注核心问题。。。您是否可以编辑该问题以显示P1的一般目录结构,例如导入P3的P1代码是如何编写的导入…P3。。。声明?@sinoroc,很抱歉回复晚了。我更新了问题。希望这有助于更清楚地理解我的问题。好的,我看不出有什么特别困难的。既然您似乎熟悉git子模块,那就随它去吧。到底是什么阻碍了你继续前进?也许展示一个混凝土。非常感谢你的帮助。在我的情况下,似乎vendoring确实有帮助,但由于所有人都试图避免将其作为一种不好的做法,也许最好添加一些用于子模块管理的自定义工具,如确保安装的子模块版本与项目树眼中的所有子模块兼容的工具,vendoring可能会有所帮助,但这应该是最后的解决办法,因为出于许多原因,这确实是一种不好的做法,安全就是其中之一。有时根本就不存在任何合适的依赖项版本组合,而我所知道的解决这一问题的唯一方法之一就是销售关于试图找到合适的依赖项组合的主题:非常感谢您的帮助。在我的情况下,似乎vendoring确实有帮助,但由于所有人都试图避免将其作为一种不好的做法,也许最好添加一些用于子模块管理的自定义工具,如确保安装的子模块版本与项目树眼中的所有子模块兼容的工具,vendoring可能会有所帮助,但这应该是最后的解决办法,因为出于许多原因,这确实是一种不好的做法,安全就是其中之一。有时根本就不存在任何合适的依赖项版本组合,而我所知道的解决这一问题的唯一方法之一就是销售关于试图找到合适的依赖项组合的主题: