使用版本控制标记发现版本号

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

如果 setup.py 始终从签出运行,则不必执行此操作,但是 否则vcversioner必须知道要使用的版本。

还可以通过指定 版本文件来更改名称 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,
)

这是必要的,因为 vcversioner distutils钩子不会是 可用。

版本模块

setup.py 不是唯一复制版本信息的地方。通过 生成版本模块时,可以导入包的 \uu init\uuu.py 文件 版本信息。例如,使用名为 spam的包

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>
%(根)s
为根提供的值。这不适用于 根目录 参数本身。
%(pwd)s
当前工作目录。

/ 将自动转换为 当前平台,如 \

斯芬克斯文档

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何保护嵌入在pdf中的隐写图像   java vert。x getting无法创建子事件循环   maven编译上不存在java包   Spring规范的谓词应该是静态的吗?   java测试使用其他测试的内部ContextConfiguration   java所有变量名中都应该包含度量单位吗?   java运行此代码后,我得到一个空白的sql文件:(   java如何添加到其他地方已经创建的哈希映射?   java JavaFX如何在网格窗格中垂直对齐HBox中的复选框   用于格式化XML/XSLT的java Eclipse插件   java Android:使用JDBC?   将Web服务导出到其他环境后出现java运行时错误   java如何从当前登录的用户获取数据   java使用Dozer将一种类型的列表转换为另一种类型的数组   带有简单差异的java Javers返回实体\实例\带有抽象实体的\空\ ID   javajavax。坚持不懈键入查询。getSingleResult()NoResultException,即使记录存在   java如何传递图形g   java在Android中使用Smack API进行即时消息传递