情况
您有 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。因为每个依赖版本都是硬连线的,所以您可以控制稳定且一致的安装。开发人员可以通过手动将库更新到较新版本来控制夜间构建/出血边缘依赖项:
pip install --upgrade library # get the latest nightly build/hotfix release on your own
自定义代码/工具(用例 2)
如前所述,许多代码和自定义工具可能是使用您的库提供的 API 构建的。每个愿意使用它的人都应该使用顶部的 oneliner 通过 pip 轻松安装/更新它。
问题
其他GUI 工具开发人员应该能够使用 pip 引入库依赖项的夜间构建/修补程序版本。其他工作人员,在某处使用库作为构建块,应该始终使用 pip 获得最新的稳定版本。您希望为通过 XYZ 版本控制提供稳定版本、前沿和修补程序版本的库保留一个独特的发布过程。
对此有一些可能的解决方案,例如:
- 为自定义用户维护自述文件,说明他们应该使用 pip 安装的稳定版本
- 或者在 setup.py 中为Gui 工具设置一些魔法,克隆 git repo 并通过python setup.py develop使用它 (然后开发人员可以通过 repo 中的结帐来处理版本控制)。
但是,这些似乎都不是特别优雅,所以我对您的解决方案、想法或最佳实践感兴趣,用于 Python 的稳定/前沿/夜间构建依赖管理?