构建Python包时如何指定核心元数据版本(Metadata-Version)为2.1
构建Python包时如何指定核心元数据版本(Metadata-Version)为2.1
我完全懂你的处境——仓库不支持2.2版本的元数据,又没权限升级,只能硬着头皮把元数据版本降到2.1对吧?别着急,我给你整理了几种可行的方案,覆盖常用的构建工具,你按需选就行:
方法一:用Setuptools(支持setup.py或pyproject.toml)
1. 传统setup.py方式
如果你的项目还在用setup.py,直接在setup()函数里加metadata_version参数就行,非常直接:
from setuptools import setup setup( name="你的包名", version="0.1.0", metadata_version="2.1", # 这里明确指定元数据版本 # 其他包配置:比如author、description、packages之类的... )
2. 现代pyproject.toml方式
要是你用的是pyproject.toml配合Setuptools,需要在配置里标记metadata_version为动态字段,然后单独指定:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "你的包名" version = "0.1.0" dynamic = ["metadata_version"] # 告诉Setuptools这个字段是手动指定的 [project.metadata] metadata_version = "2.1" # 在这里设置目标元数据版本
方法二:用Hatch构建的配置
你之前翻Hatch文档没找到,其实它有专门的配置项控制元数据版本。在项目的pyproject.toml里添加(或修改)[tool.hatch.metadata]部分:
[tool.hatch.metadata] core_version = "2.1"
这个配置会强制Hatch生成2.1版本的核心元数据,替代默认的2.2。
验证是否生效
构建完包之后,建议用twine check命令确认一下元数据版本是否正确,避免白忙活:
twine check dist/*
如果没问题,输出会显示检查通过;要是你想确认具体版本,也可以解压生成的wheel包,查看里面的METADATA文件,第一行就是Metadata-Version: 2.1。
额外注意事项
有些2.2版本新增的元数据字段(比如某些高级动态配置项),即使你指定了2.1版本,构建工具可能还是会自动升级元数据版本来兼容。所以尽量用基础的元数据字段,别用太新的特性,避免触发这种自动升级。
备注:内容来源于stack exchange,提问作者user91
相关产品推荐
相关产品推荐

