从 PKG-INFO (Python pkg_resources) 获取分发/模块元数据的解析条目

问题描述

我目前正在使用与此类似的代码

# Returns PKG-INFO in "email format",meaning it looks a little like this:
#   Name: some_python_module
#   Version: 1.2.3
dist = pkg_resources.get_distribution('some_python_module')
pkginfo = dist.get_metadata(dist.PKG_INFO)

d = dict(line.split(': ',1) for line in pkginfo.split('\n') if ': ' in line)
print(d['Name'])

我想知道是否有一种“干净”的方式来为 Distribution 对象执行此键查找?

请注意,我在这里使用自定义属性,因此在我的特定情况下,仅使用 dist.project_namedist.version 是不够的。

解决方法

_parsed_pkg_infoDistInfoDistribution 窃取:

dist = pkg_resources.get_distribution('some_python_module')
pkginfo = dist.get_metadata(dist.PKG_INFO)

parsed = email.parser.Parser().parsestr(pkginfo)
print(parsed['Name'])

不确定为什么此方法不在 Distribution 中,因为它似乎对 DistInfoDistributionEggInfoDistribution 都有效——顺便说一下,这就是 dist.PKG_INFO 的用途,此变量在这两者之间有所不同('METADATA' 代表 .dist-info'PKG-INFO' 代表 .egg-info)。

小注:parsestr 返回一个 FeedParser 对象,当您对其调用 print 时,该对象输出解析的输入源——不要被这个混淆,它不是 str。另请注意,the RFC 不允许在键名中使用空格,这会导致无提示解析器错误!

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...