如何列出 Python 包的额外功能

Posted

技术标签:

【中文标题】如何列出 Python 包的额外功能【英文标题】:How can I list the extra features of a Python package 【发布时间】:2020-12-04 06:15:07 【问题描述】:

一些 Python 包具有额外的功能,可以通过将它们放在括号中来安装,例如 requests 包的 security 额外功能:

pip install requests[security]

有没有办法列出给定包的所有附加功能?

我在 pip 文档中找不到类似的内容。

【问题讨论】:

我知道现在有一种直截了当的方法,而且确实很不错。 【参考方案1】:

pip 中有两个关于此的开放功能请求:

#3797 - pip show doesn't handle extras_requires #4824 - Add support for outputting a list of extras and their requirements.

与此同时,jaraco 提供了一种使用importlib_metadata 的 API 并适用于已安装包的解决方法。

复制粘贴到下面:

更好的选择是使用具有 API 的 importlib_metadata。

>>> import importlib_metadata
>>> importlib_metadata.metadata('xonsh').get_all('Provides-Extra')
['linux', 'mac', 'proctitle', 'ptk', 'pygments', 'win']
>>> importlib_metadata.metadata('xonsh').get_all('Requires-Dist')
["distro; extra == 'linux'", "gnureadline; extra == 'mac'", "setproctitle; extra == 'proctitle'", "prompt-toolkit; extra == 'ptk'", "pygments (>=2.2); extra == 'pygments'", "win-unicode-console; extra == 'win'"]

并使用打包来解析它们:

>>> req = next(map(packaging.requirements.Requirement, importlib_metadata('xonsh').get_all('Requires-Dist')))
>>> req.name
'distro'
>>> req.specifier
<SpecifierSet('')>
>>> req.extras
set()
>>> req.marker
<Marker('extra == "linux"')>

【讨论】:

感谢您的解决方法,它有效 :) 如果可以将这样的功能作为 pip 的一部分实现,那就太好了!我已经评论了github问题

以上是关于如何列出 Python 包的额外功能的主要内容,如果未能解决你的问题,请参考以下文章

如何列出用户收到的所有授权?

python Python脚本列出给定Python包的所有子模块

Python学习笔记__4.4章 装饰器(添加额外功能)

如何知道python包的特点? [关闭]

Python学习---8.10包的使用及loggin模块

一分钟学会Python中pip的安装与使用