情况
您有 2 个软件产品正在开发中,一个是提供 API 的库,另一个是向最终用户公开该库的GUI 工具。 此外,您希望您所在位置的大量技术人员将库用作各种相关自定义代码、工具和 Assets 的构建 block 。
这两种软件产品(库和 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 中。因为每个依赖版本都是硬连线的,所以您可以控制稳定一致的安装。开发人员可以通过手动将 library 更新到较新的版本来控制夜间构建/前沿依赖性:
pip install --upgrade library # get the latest nightly build/hotfix release on your own
自定义代码/工具(用例 2)
如前所述,许多代码和自定义工具可能是使用您的库 提供的 API 构建的。每个愿意使用它的人都应该使用顶部的 oneliner 通过 pip 轻松安装/更新它。
问题
其他 GUI 工具 开发人员应该能够使用 pip 引入 library 依赖项的夜间构建/修补程序版本。其他人员在某处使用library 作为构建 block ,应该始终使用 pip 获取最新的稳定版本。您希望为库保留一个独特的发布程序,通过 X.Y.Z 版本控制提供稳定版本、前沿和修补程序版本。
对此有一些可能的解决方案,例如:
- 为自定义用户维护一个自述文件,说明他们应该使用 pip 安装的稳定版本
- 或者在 setup.py 中为 Gui Tool 克隆 git repo 并通过 python setup.py develop 使用它 (版本控制可以然后由开发人员通过 repo 中的结帐处理)。
但是,这些看起来都不是特别优雅,所以我对您针对 Python 的稳定/前沿/夜间构建依赖项管理的解决方案、想法或最佳实践感兴趣?
最佳答案
在 pip
中管理“前沿”版本可以通过使用 --pre
flag of pip
来实现
来自 pip install --help
:
--pre Include pre-release and development versions. By default, pip only finds stable versions.
您应该添加 classifiers为您的项目,特别是将您的稳定版本设置为 Development Status::5 - Production/Stable
并将您的“最前沿版本”设置为低于 5 的任何值。
这就是主要的 python 包管理它们的 alpha 的方式,例如:django project目前 1.9a 处于 alpha 状态,1.8.5 处于稳定状态。
要升级到标记为 Development Status::3 - Alpha 的最新版本
:
pip install --pre --upgrade library
使用该库作为构建 block 的用户现在不需要有关 alpha 版本的信息,而是会使用常规的 pip install library
,它将安装最新的稳定标记版本。
关于python - Bleeding Edge/Nightly Build Python 中的依赖管理。策略和最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33136153/