python3 -m build ... 通过命令行参数提供版本号

python3 -m build ... supply version number via command line argument

我使用 python3 -m build 构建我的 python 包,如官方文档中所述:Packaging Projects.

但我不想在源代码中存储我的版本号,因为这会在 git 存储库中造成太多无用的更改。

有没有办法在 setup.cfg 中将 version 留空并通过 python3 -m build 命令行提供版本?

我使用推荐的pyproject.toml文件:

[build-system]
requires = [
    "setuptools>=42",
    "wheel"
]
build-backend = "setuptools.build_meta"

Python 论坛中的相关问题:https://discuss.python.org/t/avoid-having-version-number-in-source-code/10188

相关问题:https://github.com/pypa/build/issues/347

我能得到的最接近的是使用如下命令构建后端 setuptools

python -m build \
--config-setting=--global-option=egg_info \
--config-setting=--global-option=--tag-build=SUFFIX

这会为版本字符串添加一个后缀。

因此,如果您在 setup.cfg 中将版本字符串设置为 1,并在命令行中将 SUFFIX 设置为 .2.3,您将得到 1.2.3

这是一个 hack,但似乎工作得很好。测试:

  • Python 3.6.9
  • build 0.6.0.post1
  • 设置工具 58.0.2

不保证它在可预见的将来会继续工作。对于长期解决方案,也许值得关注 and/or 权衡 setuptools feature request.

参考文献:

我找到了这个解决方案:

# setup.py
from setuptools import setup
import os
setup(version=os.environ.get('BUILD_VERSION'))

像这样调用构建:

BUILD_VERSION=... python3 -m build