从 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_name
或 dist.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
中,因为它似乎对 DistInfoDistribution
和 EggInfoDistribution
都有效——这就是 dist.PKG_INFO
的用途方式,这个变量在这两个之间是不同的('METADATA'
代表 .dist-info
和 'PKG-INFO'
代表 .egg-info
)。
注意事项:parsestr
returns 一个 FeedParser
对象,当您在它——不要对此感到困惑,它不是 str
。另请注意,the RFC 不允许在键名中使用空格,这会导致静默解析器错误!
我目前使用的代码与此类似
# 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_name
或 dist.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
中,因为它似乎对 DistInfoDistribution
和 EggInfoDistribution
都有效——这就是 dist.PKG_INFO
的用途方式,这个变量在这两个之间是不同的('METADATA'
代表 .dist-info
和 'PKG-INFO'
代表 .egg-info
)。
注意事项:parsestr
returns 一个 FeedParser
对象,当您在它——不要对此感到困惑,它不是 str
。另请注意,the RFC 不允许在键名中使用空格,这会导致静默解析器错误!