twine上传报错(InvalidDistribution: Invalid distribution metadata)解决方案

错误原因分析

这个报错的核心含义是:你使用了 license-expression(许可证表达式)这个字段,但它是在 metadata version 2.4 中才被引入的,而你的项目元数据版本还停留在 2.1,版本不兼容导致验证失败。
简单来说,twine 会严格校验项目的 setup.py/pyproject.toml 中的元数据格式,低版本元数据不支持高版本才有的字段。
 

解决方案

方案 1:升级元数据版本(推荐)

修改项目的元数据配置,将版本升级到 2.4 及以上,适配 license-expression 字段。
根据你的项目配置方式,分两种情况: 
情况 A:使用 setup.py
修改 setup.py 中的 metadata_version 字段,并规范许可证写法
from setuptools import setup

setup(
    name="你的包名",
    version="0.1.0",
    # 升级元数据版本到 2.4
    metadata_version="2.4",
    # 使用 license_expression 字段(替代旧的 license 字段)
    license_expression="MIT",  # 示例:替换为你的实际许可证,如 Apache-2.0、BSD-3-Clause 等
    author="你的名字",
    author_email="你的邮箱",
    description="包描述",
    packages=["你的包目录"],
)
情况 B:使用 pyproject.toml(现代推荐方式)
修改 pyproject.toml 中的 [project] 部分:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "你的包名"
version = "0.1.0"
# 元数据版本会自动适配,无需手动指定
license = { file = "LICENSE" }  # 或直接写表达式:license = "MIT"
authors = [
    { name="你的名字", email="你的邮箱" }
]
description = "包描述"

方案 2:降级许可证写法(兼容旧版本)

如果不想升级元数据版本,可改用旧版本支持的 license 字段(去掉 license-expression):
# setup.py 示例(元数据版本保留 2.1)
setup(
    name="你的包名",
    version="0.1.0",
    metadata_version="2.1",
    # 改用旧的 license 字段,而非 license_expression
    license="MIT",  # 直接写许可证名称,而非表达式
    # 其他配置...
)

方案 3:降级 twine/setuptools 版本(兜底,可能有兼容性问题)

# twine 3.x 之前的版本校验较松,setuptools 50.x 适配旧元数据
pip install twine==3.8.0 setuptools==50.0.0

方案 4:使用自定义脚本上传(终极兜底)

upload_script.py
import requests

# 配置信息
upload_url = "http://10.0.0.214:8080/"  # 仓库上传地址
package_path = "your_package-0.1.0-py3-none-any.whl"  # 包路径
username = "你的仓库用户名"  # 如果不需要认证,可删去auth相关
password = "你的仓库密码"

# 读取包文件
with open(package_path, "rb") as f:
    files = {"file": (package_path, f)}
    # 发送上传请求
    response = requests.post(
        upload_url,
        files=files,
        auth=(username, password)  # 无认证则注释这行
    )

# 打印结果
print(f"上传状态码: {response.status_code}")
print(f"上传响应: {response.text}")

运行脚本:

python upload_script.py

  

 
posted @ 2026-03-19 10:34  NAVYSUMMER  阅读(4)  评论(0)    收藏  举报
交流群 编程书籍