使用版本控制标记发现版本号
vcversioner的Python项目详细描述
vC版本
电梯间距 :您可以编写一个没有版本信息的a setup.py 。 指定,vcversioner将找到最近的、格式正确的vcs标记和 从中提取一个版本。
使用版本控制系统的 生成版本号的标记机制 到处都是信息。最后我还是照样复制粘贴了 为了避免重复,将代码转换成几个不同的setup.py文件 版本信息。但是,复制粘贴是愚蠢的,单元测试 setup.py 文件很难。此代码已被分解到VCversioner中。
基本用法
vcversioner将其自身安装为setuptools钩子,从而使用 非常简单:
from setuptools import setup setup( # [...] setup_requires=['vcversioner'], vcversioner={}, )
vcversioner 参数的存在自动激活vcversioner 并更新项目的版本。vcversioner的参数 参数也可以是关键字参数的dict,这些关键字参数 查找版本 将与呼叫。
允许在不需要 .git (或 .hg )的情况下分配tarballs, 等等)目录,vcversioner还将写出一个名为(默认情况下)的文件 版本.txt 。然后,如果没有VCS程序或程序无法 找到任何版本信息,vcversioner将从 版本.txt 文件。但是,此文件需要包含在 分布式tarball,因此下面的行应该添加到 清单中。
include version.txt
如果
还可以通过指定 版本文件来更改名称 version.txt 参数。例如:
from setuptools import setup setup( # [...] setup_requires=['vcversioner'], vcversioner={ 'version_file': 'custom_version.txt', }, )
为了与语义版本控制兼容,vcversioner将删除 从版本标签开始。也就是说,标签 v1.0 将是 就好像是 1.0
可以使用 strip前缀指定要除去的其他前缀。 vcversioner的参数。为了与git dch兼容,可以指定 strip_前缀 为 'debian/'
非挂钩使用
不需要依赖vcversioner;而 pip 将负责 依赖关系是自动的,有时有一个独立的项目 更简单。vcversioner是一个易于添加到项目中的单个文件。简单地 复制现有setup.py旁边的整个vcversioner.py文件 归档并稍微更新用法:
from setuptools import setup import vcversioner setup( # [...] version=vcversioner.find_version().version, )
这是必要的,因为
版本模块
from setuptools import setup setup( # [...] setup_requires=['vcversioner'], vcversioner={ 'version_module_paths': ['spam/_version.py'], }, )
这将生成一个定义了 修订版。然后,在 垃圾邮件/uu init.py中:
from spam._version import __version__, __revision__
因为它的行为类似于(并且 是 )一个普通的python模块,所以 不需要清单.in 。
自定义VCS命令
vcversioner默认情况下会尝试检测whICH VCS正在被使用并选择 基于此运行的命令。对于git,即git --git dir %(根)s/.git 描述标记。对于hg,即 hg log -r %(根)s -r 。 --模板 {latesttag}-{latesttagdistance}-hg{node short}'
任何命令都应输出一个字符串,该字符串描述 格式为1.0-0-gdeadbeef。具体来说,就是 在当前提交和标记为提交的版本之间提交。 修订版应该有一个VCS特定的前缀,例如,对于Git和hg应该有 g 对于Hg.
然而,有时这还不够。如果有人只想用 带注释的标记,git命令可以修改如下:
from setuptools import setup setup( # [...] setup_requires=['vcversioner'], vcversioner={ 'vcs_args': ['git', 'describe', '--long'], }, )
vcs_args参数必须始终是字符串列表,而不是 由外壳解释。这与subprocess.popen 期待。
在支持多个vcs之前,此参数的拼写一直是 git_args 系统已添加。
开发版本
vcversioner还可以自动生成与提交对应的版本 它本身没有被标记。遵循 pep 386 ,通过添加 .post 后缀到先前提交时标记指定的版本。为了 例如,如果当前提交是超过 1.0 标记的三个修订,则 计算版本为 1.0.post3
可以通过设置 include\u dev_version 参数来禁用此行为 至 假 。在这种情况下,上述未标记提交的版本将 只是 1.0
因为hg需要提交来生成标记,所以有一个参数 递减dev_version 从 最近的标签。如果检测到使用的VCS为Hg(即开始修订 对于 'hg' )和 递减版本 未指定为 假 , 递减版本 将自动设置为 真
项目根
为了防止来自其他源存储库的污染,vcversioner 在1.x版本系列中,将只在项目根目录中查找 储存库。项目根目录默认为当前工作目录,其中 在运行setup.py时经常出现这种情况。可以通过指定 根参数。有人担心可以从运行setup.py 包含setup.py的目录以外的目录应确定 从setup.py:
from setuptools import setup import os setup( # [...] setup_requires=['vcversioner'], vcversioner={ 'root': os.path.dirname(os.path.abspath(__file__)), }, )
要在0.x版本系列中获得相同的行为,可以将vcs_args设置为 包括 --git dir标志:
from setuptools import setup setup( # [...] setup_requires=['vcversioner'], vcversioner={ vcs_args=['git', '--git-dir', '%(root)s/.git', 'describe', '--tags', '--long'], }, )
默认情况下, version.txt也从项目根目录中读取。
替换
如上所示, 根 , 版本文件 ,以及 VCS_args 都支持一些 替换:
< DL>/ 将自动转换为 当前平台,如 : 或 \
斯芬克斯文档
sphinx 文档是另一个版本号获取的地方 复制的。幸运的是,自从sphinx配置是python代码,vcversioner 也可以在那里使用。假设vcversioner是在系统范围内安装的,那么 很容易。因为sphinx通常使用当前工作目录作为 <;您的项目需要告诉vcversioner 项目根目录是。只需将conf.py 更改为包含:
from setuptools import setup setup( # [...] setup_requires=['vcversioner'], vcversioner={}, )0
这假设您的项目根目录是当前 工作目录。稍长一点的版本,更结实一点 将是:
from setuptools import setup setup( # [...] setup_requires=['vcversioner'], vcversioner={}, )1
此版本更健壮,因为它发现项目根目录与 当前工作目录,但与conf.py文件相关。
如果vcversioner与您的项目捆绑在一起,而不是依赖于它 安装后,您可能需要在 conf.py 之前添加以下内容 导入vcversioner :
from setuptools import setup setup( # [...] setup_requires=['vcversioner'], vcversioner={}, )2
这句台词,或者有同样效果的东西,有时在 使用Sphinx Autodoc 扩展名。
阅读文档
在 上构建文档时,甚至可以使用vcversioner阅读 文档 如果vcversioner与您的项目捆绑在一起,则无需进一步 做完。否则,您需要告诉read the docs安装vcversioner 在它构建文档之前。这意味着使用 requirements.txt 文件
如果您的项目已设置为使用 requirements.txt 文件,添加vcversioner 到其中。否则,创建 requirements.txt文件。假设您的文档位于 文档中 主项目目录的子目录,create docs/requirements.txt 包含 vcversioner 行。
然后,对项目的配置进行以下更改: 配置在以下位置编辑: https://readthedocs.org/dashboard/vcversioner/edit/ )
- 选中"使用VirtualEnv"下的复选框
- 如果之前没有requirements.txt,则设置 需求 文件 到新创建的文件,例如 docs/requirements.txt