为 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.
上打开一个问题可能是有意义的
与语义方法相比,我更喜欢日历版本控制方案(参见 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.
上打开一个问题可能是有意义的