我怀疑是pip
安装了一个文件。
如何找到安装该文件的软件包?
换句话说,我正在寻找类似于pacman -Qo filename
或dpkg -S filename
的命令,但是pip
。它存在吗?或者我应该使用pip
和grep
的某种组合?
在这种情况下,我不知道如何列出所有已安装的文件。
答案 0 :(得分:7)
您可以尝试使用
pip list | tail -n +3 | cut -d" " -f1 | xargs pip show -f | grep "filename"
然后搜索查找该文件的结果。
答案 1 :(得分:2)
你可以使用这样的python脚本:
#!/usr/bin/env python
import sys
try:
from pip.utils import get_installed_distributions
except ModuleNotFoundError:
from pip._internal.utils.misc import get_installed_distributions
MYPATH=sys.argv[1]
for dist in get_installed_distributions():
# RECORDs should be part of .dist-info metadatas
if dist.has_metadata('RECORD'):
lines = dist.get_metadata_lines('RECORD')
paths = [l.split(',')[0] for l in lines]
# Otherwise use pip's log for .egg-info's
elif dist.has_metadata('installed-files.txt'):
paths = dist.get_metadata_lines('installed-files.txt')
else:
paths = []
if MYPATH in paths:
print(dist.project_name)
用法如下:
$ python lookup_file.py requests/__init__.py
requests
我在这里写了一个更完整的版本,有绝对路径:
答案 2 :(得分:0)
试试这个!
find_pkg_by_filename(){ for pkg in $(pip list | cut -d" " -f1) ; do if pip show -f "$pkg" | grep "$1" ; then echo "=== Above files found in package $pkg ===" ; fi ; done ; }
find_pkg_by_filename somefilename
请注意,如果您将-q
添加到grep
,它会在匹配后立即退出,然后pip会抱怨管道损坏。