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
相关产品推荐
相关产品推荐

