您正在开发2个软件产品,库,它提供API和 GUI工具,为最终用户公开库。 另外,您希望您所在地的许多技术人员将库用作各种相关自定义代码,工具和资产的构建块。
两个软件产品(库和GUI工具)都在积极开发并相互影响。对于你想要最简单的分发方式和devenv设置,使用 pip :
pip install gui_tool
or
pip install library
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
如上所述,可以使用库提供的API构建许多代码和自定义工具。每个愿意使用它的人都应该通过顶部的oneliner轻松安装/更新它。
GUI工具开发人员应该能够使用pip获取库依赖项的每晚构建/修补程序版本。使用库作为构建块的其他人员应始终使用pip获取最新的稳定版本。您希望保留库的一个独特发布过程,通过X.Y.Z版本提供稳定版本,前沿和修补程序版本。
有一些可能的解决方案,例如:
但是,这些都不是特别优雅,所以我对你的解决方案,想法或最佳实践感兴趣,以便为Python提供稳定/流血/每晚构建依赖管理?
答案 0 :(得分:1)
pip
中管理“前沿”版本
来自pip install --help
:
- pre包括预发布和开发版本。默认情况下,pip只能找到稳定的版本。
您应该将classifiers添加到您的项目中,特别是将您的稳定版本设置为Development Status :: 5 - Production/Stable
,将您的“前沿版本”设置为低于5的任何值。
这是主要的python包管理其alpha的方式,例如:django project,当前alpha为1.9a,稳定为1.8.5。
要升级到标记为Development Status :: 3 - Alpha
的最新版本:
pip install --pre --upgrade library
使用该库作为构建块的用户现在不需要关于alpha版本,并且将使用常规pip install library
来安装最新的稳定标记版本。
答案 1 :(得分:0)
我不确定您是否需要管理库或多个库?
您似乎遇到了复杂的Python依赖关系跟踪和部署案例。很少有大型Python项目面临同样的问题,需要跟踪几个不同的发布渠道,测试版和前沿。最值得注意的是Plone,其中包含超过300 MB的Python鸡蛋源代码。
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 - 但是这里的复杂性已经变得如此之高,以至于局外人不再容易理解正在发生的事情。此处介绍的发布流程http://buildoutcoredev.readthedocs.org/en/latest/release.html
警告建筑物的边缘是神秘而粗糙的,就像刚浮出水面的火山熔岩岛一样。它是否比使用自定义脚本生成pip requirements.txt更优雅?如果您有多个需要管理的库,请单击是。