为 Python 包使用日历版本控制

Use calendar versioning for Python package

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

有没有办法强制 PyPI 确认零填充月份,或者 Python 包不支持 YYYY.0M 方案?

是的,这是可能的。问题不在于 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文件,将PKG-INFO文件中出现的2019.3.29修改为2019.03.29,重新打包成一个名为calver-test-2019.03.29.tar.gz,并上传到 PyPI,它会保留零填充。

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

显然,如果这是您的预期行为,此过程并不理想,因此在 setuptools issue tracker.

上打开一个问题可能是有意义的