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

时间:2013-12-17 13:17:28

标签: python package pip

我希望看到一个依赖于某个PIP包的包列表。也就是说,给定django,我希望看到django-cmsdjango-filer,因为我安装了这些软件包并且它们都有django作为依赖项。

5 个答案:

答案 0 :(得分:18)

非常简单:

pip show <insert_package_name_here>| grep ^Requires

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

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

之前设置搜索字符串:

REQUIRES=django

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

答案 1 :(得分:9)

我知道这里已经接受了答案,但实际上,在我看来,你想要的是使用pipdeptree

pip install pipdeptree
pipdeptree --help

pipdeptree -r -p django

答案 2 :(得分:5)

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

pip freeze | cut -f 1 -d'=' |  xargs -L1 pip show 

例如,以下代码段:

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))

在我的系统上输出pandas

答案 3 :(得分:2)

基于requirements.txt的一个班轮。在这个例子中,我正在寻找funcsigs反向依赖,并发现了mock。只需通过其他内容更改funcsigs即可。

cat requirements.txt | grep -v git | sed 's/==.*//' | xargs -I % echo 'pip show % 2>/dev/null | grep Requires | grep -q funcsigs && echo %' | sh

答案 4 :(得分:2)

从版本10开始,pip show还包含一个“必填项”条目。所以

pip show <package_name>
如今

就足够了。或者可能

pip show <package_name~ | grep ^Required-by

如果您只想为脚本或其他内容获得一行。