4

情况


您有 2 个软件产品正在开发中,一个提供 API的和一个为最终用户公开该库的GUI 工具。此外,您希望很多技术人员在您所在的地方使用该库作为各种相关自定义代码、工具和资产的构建块。

两种软件产品(库和 GUI 工具)都在积极开发并相互影响。对于您想要最简单的分发方式和 devenv 设置,使用pip

pip install gui_tool
or
pip install library

Gui 工具(用例 1)


GUI 工具的安装是通过pip进行的,并且依赖项在setup.py中用硬版本号注明。您的库是这些依赖项之一:

...
install_requires = ['library==1.2, package_x==0.3, package_y==0.6'],
...

安装过程包括安装工具并将依赖项解析为新的 virtualenv。因为每个依赖版本都是硬连线的,所以您可以控制稳定且一致的安装。开发人员可以通过手动将更新到较新版本来控制夜间构建/出血边缘依赖项:

pip install --upgrade library  # get the latest nightly build/hotfix release on your own

自定义代码/工具(用例 2)


如前所述,许多代码和自定义工具可能是使用您的提供的 API 构建的。每个愿意使用它的人都应该使用顶部的 oneliner 通过 pip 轻松安装/更新它。


问题


其他GUI 工具开发人员应该能够使用 pip 引入依赖项的夜间构建/修补程序版本。其他工作人员,在某处使用作为构建块,应该始终使用 pip 获得最新的稳定版本。您希望为通过 XYZ 版本控制提供稳定版本、前沿和修补程序版本的库保留一个独特的发布过程。

对此有一些可能的解决方案,例如:

  • 为自定义用户维护自述文件,说明他们应该使用 pip 安装的稳定版本
  • 或者在 setup.py 中为Gui 工具设置一些魔法,克隆 git repo 并通过python setup.py develop使用它 (然后开发人员可以通过 repo 中的结帐来处理版本控制)

但是,这些似乎都不是特别优雅,所以我对您的解决方案、想法或最佳实践感兴趣,用于 Python 的稳定/前沿/夜间构建依赖管理?

4

2 回答 2

2

pip可以通过使用以下标志来管理“前沿”版本--prepip

来自pip install --help

--pre 包括预发布和开发版本。默认情况下,pip 只查找稳定版本。

您应该将分类器添加到您的项目中,特别是将您的稳定版本设置为Development Status :: 5 - Production/Stable并将您的“前沿版本”设置为低于 5 的任何值。

这就是主要的 python 包管理它们的 alpha 的方式,例如:django 项目,目前 1.9a 处于 alpha 状态,1.8.5 处于稳定状态。

要升级到标记为的最新版本Development Status :: 3 - Alpha

pip install --pre --upgrade library 

使用该库作为构建块的用户现在不需要了解 alpha 版本,并且将使用pip install library将安装最新的稳定标记版本的常规版本。

于 2015-10-14T22:09:38.967 回答
0

我不确定您是否需要管理图书馆或多个图书馆?

看起来您有一个复杂的 Python 依赖项跟踪和部署案例。很少有大型 Python 项目面临同样的问题,需要跟踪几个不同的发布渠道、测试版和前沿。最值得注意的是Plone,它拥有超过 300 MB 的 Python 鸡蛋源代码。

Plone 使用buildout作为依赖管理器而不是 pip 来解决复杂性。Buildout 为 Python 依赖项提供混合和匹配的配置文件。

要快速掌握这是如何发生的,请参阅 Plone core buildouts

警告 Buildout 的边缘神秘而粗糙,就像刚刚浮出水面的热熔岩火山岛。它比使用自定义脚本生成 pip requirements.txt 更优雅吗?是的,如果您有多个图书馆需要管理。

于 2015-10-14T21:57:46.890 回答