You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

importlib.metadata读取pyproject.toml的authors字段异常问题咨询

解决importlib.metadata获取Python包作者元数据的问题

问题原因

你遇到的情况并非importlib.metadata未适配新规范,而是传统Core Metadata字段和PEP 621(pyproject.toml元数据规范)的体系差异导致的:pyproject.toml里的authors列表(带name和email的条目),被setuptools处理后仅会合并到传统的Author-email字段,并未自动映射到Author字段,所以调用metadata()时会得到Author为None的结果。

直接获取不含邮箱的独立作者信息的方法

方法1:使用适配PEP 621的authors()方法(推荐)

Python 3.10及以上的importlib.metadata提供了authors()方法,专门读取pyproject.toml里的authors列表,返回包含作者对象的列表,每个对象自带name和email属性,直接提取姓名即可:

import importlib.metadata

# 替换为你的包名
authors = importlib.metadata.authors("myproj")
# 提取所有不含邮箱的作者名
author_names = [author.name for author in authors]

方法2:手动解析Author-email字段(兼容旧Python版本)

如果你的Python版本低于3.10,没有authors()方法,可以直接拆分Author-email字段的内容(格式通常为姓名 <邮箱>):

import importlib.metadata

meta = importlib.metadata.metadata("myproj")
author_email_str = meta.get("Author-email", "")
# 拆分每个作者条目
author_entries = [entry.strip() for entry in author_email_str.split(",")]
# 提取姓名部分
author_names = [entry.split("<")[0].strip() for entry in author_entries]

补充说明

如果你非要让metadata()["Author"]返回合并的作者名,可以在pyproject.toml里手动添加冗余的传统Author字段,但这不符合PEP 621的规范设计,不推荐:

[project]
name = "myproj"
authors = [
  { name = "张三", email = "zhangsan@example.com" },
  { name = "李四", email = "lisi@example.com" }
]
# 手动添加传统Author字段(冗余配置)
Author = "张三, 李四"

内容的提问来源于stack exchange,提问作者9769953

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:55:10