如何通过PIP查看依赖于某个包的所有包?

lin*_*ndy 24 python pip package

我想看一个依赖于某个包含PIP的软件包列表.也就是说django,我希望看到django-cms,django-filer因为我安装了这些软件包并且它们都具有django依赖性.

Don*_*ion 24

相当简单:

pip show <insert_package_name_here>| grep ^Requires
Run Code Online (Sandbox Code Playgroud)

或者相反:(抱歉,我弄错了!)

for NAME in $(pip freeze | cut -d= -f1); do REQ=$(pip show $NAME| grep Requires); if [[ "$REQ" =~ "$REQUIRES" ]]; then echo $REQ;echo "Package: $NAME"; echo "---" ; fi;  done
Run Code Online (Sandbox Code Playgroud)

在此之前设置您的搜索字符串:

REQUIRES=django
Run Code Online (Sandbox Code Playgroud)

基本上你必须遍历整个列表并查询每一个.这可能需要一些时间.

  • 你理解错了。我想查看给定的包_需要_什么,而不是给定的包_需要_什么。 (2认同)
  • 这不起作用,但返回错误:用法:pip show [options] &lt;package&gt; ... no such option: ------------------ (2认同)

Vik*_*aag 9

我知道这里已经有了一个公认的答案,但实际上,在我看来,你想要的是使用pipdeptree:

pip install pipdeptree
pipdeptree --help

pipdeptree -r -p django
Run Code Online (Sandbox Code Playgroud)

  • 只是想明确指出,这个(好的)答案与已接受的答案有一个限制:它不会告诉您有关未安装的软件包的信息。(我来这里是为了寻找额外的功能来解决无法安装在我的 M1 Mac 上的软件包。) (3认同)

alk*_*lko 5

这个,对于早于1.3.1的pip,将列出所有包及其依赖项,您可以使用任何脚本语言解析其输出,Requires ... django包含:

pip freeze | cut -f 1 -d'=' |  xargs -L1 pip show 
Run Code Online (Sandbox Code Playgroud)

例如,以下代码段:

import os
import re

package = 'numpy'
regex = re.compile('.*{}($|,).*'.format(package))

def chunks(l, n): return [l[i:i+n] for i in range(0, len(l), n)]

cmd = "pip freeze | cut -f 1 -d'=' |  xargs -L1 pip show"
packages = os.popen(cmd).read()
pkg_infos = chunks(packages.splitlines(), 5)
print '\n'.join(x[1][6:] for x in filter(lambda x: regex.match(x[-1]), pkg_infos))
Run Code Online (Sandbox Code Playgroud)

pandas我系统上的输出.


elW*_*ero 5

从版本 10 开始,pip show还包括一个“Required-by”条目。所以就

pip show <package_name>
Run Code Online (Sandbox Code Playgroud)

现在就够了。或者可能

pip show <package_name> | grep ^Required-by
Run Code Online (Sandbox Code Playgroud)

如果您只想获取脚本或其他内容的那一行。