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

标签 python pip dependency-management release-management nightly-build


情况


您有 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/

相关文章:

intellij-idea - 如何将源附加到 IntelliJ IDEA 13.0 中自动生成的基于 Gradle 的依赖项,以便在下一次 Gradle 项目刷新后仍然存在?

python - 复制 xpath 未提供正确的 xpath?

python - X11 - 如何使用 Python 提升另一个应用程序的窗口

python - 无法安装 ipykernel。如果 pip 不可用。请使用该包

Python 许多依赖项中的任何一个

python - 在 Python 中创建依赖关系图

python - 如何按顺序查找和替换偶数位置元素的值

python - Flask SQLAlchemy 从查询结果中的两个连接的映射实体获取列

python - 安装 pip-2.7

ubuntu - 无法通过 apt-get 在我的 Ubuntu 9.04 上安装 pip