1

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

# 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在我的特定情况下还不够。

4

1 回答 1

1

偷来_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因为它似乎对两者都有效DistInfoDistribution-EggInfoDistribution这就是dist.PKG_INFO顺便说一句,这个变量在这两者之间是不同的('METADATA'for.dist-info'PKG-INFO'for .egg-info)。

小注意:当你调用它时parsestr返回一个FeedParser输出解析的输入提要print的对象——不要对此感到困惑,它不是str. 另请注意, RFC不允许在键名中使用空格,这会导致静默解析器错误!

于 2021-01-25T15:00:00.760 回答