我目前使用的代码类似于以下
# 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'])
我想知道是否有一个"清洁"如何为一个分布对象做这个键查找?
注意,我在这里使用自定义属性,所以在我的特殊情况下,dist.project_name
或dist.version
是不够的。
_parsed_pkg_info
inDistInfoDistribution
被盗:
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
的作用,顺便说一下,这个变量在这两个之间不同(.dist-info
的'METADATA'
和.egg-info
的'PKG-INFO'
)。
小注意:parsestr
返回一个FeedParser
对象,当您调用print
时,该对象输出解析的输入提要—不要对此感到困惑,它不是str
。还要注意,RFC不允许在键名中使用空格,这会导致无声解析器错误!