如何从Python包中获取全部同名元数据(以project.urls为例)
解决importlib.metadata获取所有Project-URL的问题
当你通过importlib.metadata读取包元数据时,直接用["Project-URL"]只能拿到第一个URL条目——这是因为元数据对象的索引操作仅返回同名字段的第一个值。要获取全部URL,需要使用get_all()方法:
代码实现
from importlib import metadata # 获取目标包的所有Project-URL条目 url_entries = metadata.metadata("pandas").get_all("Project-URL") # 将条目解析为结构化字典 url_dict = {} for entry in url_entries: # 按", "拆分一次,避免URL中含逗号导致解析错误 name, url = entry.split(", ", 1) url_dict[name] = url print(url_dict) # 输出示例: # {'homepage': 'https://pandas.pydata.org', 'documentation': 'https://pandas.pydata.org/docs/', 'repository': 'https://github.com/pandas-dev/pandas'}
原理说明
setuptools构建包时,会把pyproject.toml里[project.urls]下的每一组键值对,转换为独立的Project-URL元数据字段。metadata.get_all("Project-URL")会返回所有这些字段的列表,每个元素格式为"名称, 链接",拆分后就能得到规整的字典结构。
内容的提问来源于stack exchange,提问作者Pierrick Rambaud
相关产品推荐
相关产品推荐

