首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用setuptools_scm来自动控制Python包的版本

手动管理Python包的版本号一段时间后,寻求自动化的手段,是自然而然的。

手动管理版本

手动管理Python包的版本,需要注意两个方面:

每次发布新包前,要更新包的版本号。

在安装后的默认模块下应该有一个变量,其值为版本号。

关于第一点,可以参考《PEP 440 — Version Identification and Dependency Specification》;

关于第二点,可以参考《PEP 396 — Module Version Numbers》。

当然,两边的版本号必须是相同的

除了手动修改两个版本号这种愚蠢的方案以外,要保持两边的版本号一致,无外乎两种方式:

通过包的版本号来给出的值。

通过的值来设置包的版本号。

具体的做法,可以参考《Single-sourcing the package version — Python Packaging User Guide》,其中给出了6种可行方案。

其中也有陷阱,但这里不再详述。

无论如何,这些方案里的版本号总是要手动去改的。

本文着重介绍其中的第7个方案——setuptools_scm。

自动生成版本号

setuptools_scm是PYPA推荐的一个自动管理Python包版本号的工具,是setuptools的一个插件。

它会根据包括Git在内的各大VCS的tag,来自动生成一个版本号。

当前commit就在tag上,代码没有修改:

当前commit就在tag上,代码有修改:

当前commit不在tag上,代码没有修改:

当前commit不在tag上,代码有修改:

使用方式十分简单。

首先,在中指定它。

然后,设置。

当然,旧的方式也应该去掉。

如果Git库的根目录不在所在的目录,则会出错。

届时,可把替换为以下内容。

是指相对于那里,通常设为所在目录;

是指定Git库的根目录的相对位置,这里示例的表示上一级目录,可按需指定。

设置version

使用setuptools_scm方案,则版本号是在函数中自动生成的。

主模块的如果需要和它保持一致,就需要读取已安装的当前包的版本号。

以上代码就是孤常用的一个方案。

如果出现任何意外,则返回一个明显错误的版本号。

比一般方案更复杂的一点是,孤考虑到了在中调用这个文件的情况,分别对Python 2.x和3.x做出了处理。

总结

setuptools_scm是一个不错的工具,打消了孤自己写一个的念头。

当然它也有一些不如人意的细节,比如的设计。

但瑕不掩瑜,值得一试。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180430G0NEZI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券