如何列出 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 包的额外功能的主要内容,如果未能解决你的问题,请参考以下文章