Python 中的 Bleeding Edge/Nightly Build 依赖管理。策略和最佳实践?

tim*_*ner 5 python pip nightly-build release-management dependency-management


情况


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

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

pip install gui_tool
or
pip install library
Run Code Online (Sandbox Code Playgroud)

Gui 工具(用例 1)


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

...
install_requires = ['library==1.2, package_x==0.3, package_y==0.6'],
...
Run Code Online (Sandbox Code Playgroud)

安装过程包括安装工具并将依赖项解析到新的 virtualenv 中。由于每个依赖项版本都是硬连线的,因此您可以控制稳定且一致的安装。开发人员可以通过手动将库更新到新版本来控制夜间构建/前沿依赖关系:

pip install --upgrade library  # get the latest nightly build/hotfix release on your own
Run Code Online (Sandbox Code Playgroud)

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


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


问题


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

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

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

然而,这些看起来都不是特别优雅,所以我对你们的 Python 稳定/前沿/夜间构建依赖管理的解决方案、想法或最佳实践感兴趣?

Seb*_*zny 2

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

pip install --help

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

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

这就是主要的 python 包管理其 alpha 版本的方式,例如:django 项目目前 alpha 版本为 1.9a,稳定版本为 1.8.5。

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

pip install --pre --upgrade library 
Run Code Online (Sandbox Code Playgroud)

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