我必须在 python 源代码中嵌入代码版本有什么实际原因吗?

2023-11-30

我必须在源代码中嵌入代码版本有什么实际原因吗?我明确地感兴趣setup.py但也有一些用处__version__。我所说的“嵌入源代码”是指我必须将版本号以文本形式写入文件中,而不是通过其他方式填充 python 字段。

在其他语言中,我将构建脚本设置为了解 git 标签,然后完全通过标签管理版本号。这意味着存储库中永远不会有“更改版本号”的提交。我所要做的就是标记新版本的提交并运行构建。

因此,作为一个理论示例,我可能:

def _get_version()
    command = ['git', 'describe', '--tags', '--match' 'versions/[0-9]*.[0-9]*']
    result = subprocess.run(command, stdout=subprocess.PIPE).stdout.decode('utf-8')
    return result.replace('-', '+', 1).replace('versions/', '')

setuptools.setup(
    name="example-pkg-YOUR-USERNAME-HERE", # Replace with your own username
    version=_get_version(),
    author="Example Author",
    author_email="[email protected]",
    description="A small example package",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://github.com/pypa/sampleproject",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires='>=3.6',
)

我不清楚这是否有效。的结果是setuptools.setup在上传到包存储库之前或由第三方下载时解析?当然,git repo 仅在上传之前可用,而其他人通过 pip 下载包时则不可用。

同样,我是否正确地认为,如果应用于__version__ file?


从技术上讲,您不必将该版本嵌入到包中。将版本传递给setuptools.setup()将确保它将保存在包元数据中以供打包机制处理(例如 setuptools、pip、poetry 等)。

将其包含到包中被认为是一种很好的做法,因为当您编写需要检查库版本(__version__“dundler”首次被提及于PEP 8并澄清于PEP 396),但自从 Python 3.8 嵌入以来可能不再需要了导入库.元数据:

>>> from importlib.metadata import version
>>> version("wheel")
'0.35.1'

所以你的解决方案可以正常工作,但我建议你使用setuptools-scm相反,这将阻止您自己管理子流程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我必须在 python 源代码中嵌入代码版本有什么实际原因吗? 的相关文章

随机推荐