对Python软件包使用日历版本控制

时间:2019-03-29 01:25:00

标签: python python-3.x pip pypi

与语义方法相比,我更喜欢日历版本控制方案(请参见calver.org)。但是,当我在Python软件包中使用日历版本控制时,PyPI会删除当月的零填充。例如,在setup.py中,如果版本号声明为version='19.03',则PyPI会将软件包托管为19.3(无零填充)。

是否有一种方法可以强制PyPI确认零填充月份,或者Python软件包不支持YYYY.0M方案?

1 个答案:

答案 0 :(得分:3)

是的,有可能。问题不在于PyPI,而是setuptools在构建发行版时规范版本号的方式。

使用简单的setup.py定义一个最小的包:

from setuptools import setup

setup(
    name='calver-test',
    version='2019.03.29',
    packages=[],
)

如果运行python setup.py sdist,将生成文件calver-test-2019.3.29.tar.gz,其结构如下:

calver-test-2019.3.29
├── PKG-INFO
├── calver_test.egg-info
│   ├── PKG-INFO
│   ├── SOURCES.txt
│   ├── dependency_links.txt
│   └── top_level.txt
├── setup.cfg
└── setup.py

如果您手动解压缩tar.gz文件,请在2019.3.29文件中将2019.03.29修改为PKG-INFO,然后将其重新打包到名为{{ 1}},并将其上传到PyPI,它将保留零填充。

此处的示例:https://pypi.org/project/calver-test/2019.03.29/

如果这是您的预期行为,显然,此过程并不理想,因此在setuptools issue tracker上发布问题可能很有意义。