gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:32:33 26 4
gpt4 key购买 nike

为什么我必须在源代码中嵌入代码版本,有什么实际原因吗?显然我对 setup.py 感兴趣但也有一些用途__version__ .通过“嵌入源代码”,我的意思是我必须将版本号作为文本写入文件中,而不是通过其他方式填充 python 字段。
在其他语言中,我已经设置了构建脚本以了解 git 标签,然后完全通过标签管理版本号。这意味着 repo 中永远不会提交“修改版本号”。我所要做的就是标记新版本的提交并运行构建。
因此,作为一个理论示例,我可能会:

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="author@example.com",
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__ 将完全无法填充是否正确?文件?

最佳答案

从技术上讲,您不必将版本嵌入到您的包中。将版本传递给 setuptools.setup()将确保它将保存在包元数据中以供打包机制处理(例如 setuptools、pip、诗歌等)。
将它包含在包中被认为是一种很好的做法,因为当您编写需要检查库版本的代码时它可能很有用(__version__“dundler”在 PEP 8 中首次提到,并在PEP 396 ),但可能不再需要,因为 Python 3.8 嵌入了 importlib.metadata :

>>> from importlib.metadata import version
>>> version("wheel")
'0.35.1'
所以你的解决方案可以正常工作,但我建议你使用 setuptools-scm相反,这将阻止您自己管理子流程。

关于python - 为什么我必须在 python 源代码中嵌入代码版本,有什么实际原因吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64128702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com