从 PKG-INFO (Python pkg_resources) 获取 Distribution/module 元数据的已解析条目

Get parsed entries for Distribution/module metada from 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 是不够的。

DistInfoDistribution 中从 _parsed_pkg_info 被盗:

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 returns 一个 FeedParser 对象,当您在它——不要对此感到困惑,它不是 str。另请注意,the RFC 不允许在键名中使用空格,这会导致静默解析器错误!