【问题标题】:python3 -m build ... supply version number via command line argumentpython3 -m build ... 通过命令行参数提供版本号
【发布时间】:2021-08-18 20:27:21
【问题描述】:

我使用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

【问题讨论】:

  • build 是构建前端,而您所要求的将是“构建后端”的功能。您的构建后端显然是 setuptools,因此您可以使用 setuptools-scm 之类的东西通过 git 标签获取版本号,这样您就不需要在任何文件直接。 - 据我所知,不可能将版本字符串传递给构建工具。也许使用--config-setting,但我不知道有任何后端使用它作为版本字符串。
  • 我不想使用 setuptools_scm,因为我没有从 git repo 获得版本号。
  • 好吧,没有 setuptools-scm 之类的东西,我不知道。也许有一个构建后端可以通过构建的--config-setting 获取版本字符串,但我不知道。 -- 可能相关:github.com/pypa/setuptools/issues/2491

标签: setuptools python-packaging


【解决方案1】:

我能得到的最接近的方法是使用类似以下的命令来构建 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
  • 构建 0.6.0.post1
  • setuptools 58.0.2

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

参考文献

【讨论】:

    【解决方案2】:

    我找到了这个解决方案:

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

    像这样调用构建:

    BUILD_VERSION=... python3 -m build
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 2012-11-05
      • 2017-05-24
      • 2014-04-03
      • 1970-01-01
      相关资源
      最近更新 更多