【发布时间】:2020-12-04 06:15:07
【问题描述】:
一些 Python 包具有额外的功能,可以通过将它们放在括号中来安装,例如 requests 包的 security 额外功能:
pip install requests[security]
有没有办法列出给定包的所有附加功能?
我在 pip 文档中找不到类似的内容。
【问题讨论】:
-
我知道现在有一种直截了当的方法,而且确实很不错。
一些 Python 包具有额外的功能,可以通过将它们放在括号中来安装,例如 requests 包的 security 额外功能:
pip install requests[security]
有没有办法列出给定包的所有附加功能?
我在 pip 文档中找不到类似的内容。
【问题讨论】:
pip 中有两个关于此的开放功能请求:
与此同时,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"')>
【讨论】: