出血 Edge/Nightly 在 Python 中构建依赖管理。策略和最佳实践?
Bleeding Edge/Nightly Build dependency management in Python. Strategies and best practices?
情况
您有 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 中。因为每个依赖版本都是硬连线的,所以您可以控制稳定一致的安装。开发人员可以通过手动将 库 更新到较新版本来控制每晚 builds/bleeding 边缘依赖性:
pip install --upgrade library # get the latest nightly build/hotfix release on your own
自定义 code/tools(用例 2)
如前所述,许多代码和自定义工具可能会使用您的 库 提供的 API 构建。每个愿意使用它的人都应该 install/update 使用顶部的 oneliner 轻松地通过 pip 使用它。
问题
其他 GUI 工具 开发人员应该能够使用 pip 在夜间 builds/hotfix 发布 library 依赖项。其他工作人员在某处使用 library 作为构建块,应该始终使用 pip 获取最新的稳定版本。您希望为 库 保留一个独特的发布程序,通过 X.Y.Z 版本控制提供稳定版本、前沿和修补程序版本。
对此有一些可能的解决方案,例如:
- 为自定义用户维护一个 readme,说明他们应该使用 pip 安装的稳定版本
- 或者在 setup.py 中为 Gui 工具设置一些魔法 克隆 git 存储库并通过 python setup.py develop (然后开发人员可以通过回购中的签出处理版本控制).
然而,其中 none 看起来特别优雅,所以我对 stable/bleeding edge/nightly 构建依赖管理 Python 的解决方案、想法或最佳实践很感兴趣?
我不确定你是需要管理图书馆还是几个图书馆?
您似乎有一个复杂的 Python 依赖跟踪和部署案例。很少有大型 Python 项目面临同样的问题,即需要跟踪多个不同的发布渠道、测试版和前沿技术。其中最著名的是 Plone,其中包含超过 300 MB 的 Python egg 源代码。
Plone 使用 buildout 作为依赖管理器而不是 pip 来解决复杂性。 Buildout 为 Python 依赖项提供混合和匹配配置文件。
要快速了解这是如何发生的,请参阅 Plone 核心构建
Plone 5.0最新示例:http://dist.plone.org/release/5.0-latest/versions.cfg
旧 Plone 示例 4.x 最新版本:http://dist.plone.org/release/4.3rc1/versions.cfg
Github 驱动进程的存储库 https://github.com/plone/buildout.coredev - however the complexity here has grown so high that it is no longer very easy for an outsider to grasp what is going on. Release process described here http://buildoutcoredev.readthedocs.org/en/latest/release.html
警告 Buildout 的边缘神秘而粗糙,就像刚刚浮出水面的热熔岩火山岛。是不是比用自定义脚本生成 pip requirements.txt 更优雅?是的,如果您有多个图书馆需要管理。
管理 pip
中的 "bleeding edge" 版本可以通过使用 --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
并将您的 "bleeding edge releases" 设置为低于 5.
这就是主要的 python 软件包管理其 alpha 的方式,例如:django project 当前 1.9a 处于 alpha 状态,1.8.5 处于稳定状态。
要升级到标记为 Development Status :: 3 - Alpha
的最新版本:
pip install --pre --upgrade library
使用该库作为构建块的用户现在不需要关于 alpha 版本的信息,而是会使用常规 pip install library
,它将安装最新的稳定标记版本。
情况
您有 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 中。因为每个依赖版本都是硬连线的,所以您可以控制稳定一致的安装。开发人员可以通过手动将 库 更新到较新版本来控制每晚 builds/bleeding 边缘依赖性:
pip install --upgrade library # get the latest nightly build/hotfix release on your own
自定义 code/tools(用例 2)
如前所述,许多代码和自定义工具可能会使用您的 库 提供的 API 构建。每个愿意使用它的人都应该 install/update 使用顶部的 oneliner 轻松地通过 pip 使用它。
问题
其他 GUI 工具 开发人员应该能够使用 pip 在夜间 builds/hotfix 发布 library 依赖项。其他工作人员在某处使用 library 作为构建块,应该始终使用 pip 获取最新的稳定版本。您希望为 库 保留一个独特的发布程序,通过 X.Y.Z 版本控制提供稳定版本、前沿和修补程序版本。
对此有一些可能的解决方案,例如:
- 为自定义用户维护一个 readme,说明他们应该使用 pip 安装的稳定版本
- 或者在 setup.py 中为 Gui 工具设置一些魔法 克隆 git 存储库并通过 python setup.py develop (然后开发人员可以通过回购中的签出处理版本控制).
然而,其中 none 看起来特别优雅,所以我对 stable/bleeding edge/nightly 构建依赖管理 Python 的解决方案、想法或最佳实践很感兴趣?
我不确定你是需要管理图书馆还是几个图书馆?
您似乎有一个复杂的 Python 依赖跟踪和部署案例。很少有大型 Python 项目面临同样的问题,即需要跟踪多个不同的发布渠道、测试版和前沿技术。其中最著名的是 Plone,其中包含超过 300 MB 的 Python egg 源代码。
Plone 使用 buildout 作为依赖管理器而不是 pip 来解决复杂性。 Buildout 为 Python 依赖项提供混合和匹配配置文件。
要快速了解这是如何发生的,请参阅 Plone 核心构建
Plone 5.0最新示例:http://dist.plone.org/release/5.0-latest/versions.cfg
旧 Plone 示例 4.x 最新版本:http://dist.plone.org/release/4.3rc1/versions.cfg
Github 驱动进程的存储库 https://github.com/plone/buildout.coredev - however the complexity here has grown so high that it is no longer very easy for an outsider to grasp what is going on. Release process described here http://buildoutcoredev.readthedocs.org/en/latest/release.html
警告 Buildout 的边缘神秘而粗糙,就像刚刚浮出水面的热熔岩火山岛。是不是比用自定义脚本生成 pip requirements.txt 更优雅?是的,如果您有多个图书馆需要管理。
管理 pip
中的 "bleeding edge" 版本可以通过使用 --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
并将您的 "bleeding edge releases" 设置为低于 5.
这就是主要的 python 软件包管理其 alpha 的方式,例如:django project 当前 1.9a 处于 alpha 状态,1.8.5 处于稳定状态。
要升级到标记为 Development Status :: 3 - Alpha
的最新版本:
pip install --pre --upgrade library
使用该库作为构建块的用户现在不需要关于 alpha 版本的信息,而是会使用常规 pip install library
,它将安装最新的稳定标记版本。