Ответ 1
Вы можете попробовать с
pip list | tail -n +3 | cut -d" " -f1 | xargs pip show -f | grep "filename"
Затем ищите результаты, ища этот файл.
У меня есть файл, который я подозреваю, был установлен с помощью pip
. Как я могу найти, в каком пакете установлен этот файл?
Другими словами, я ищу команду, аналогичную pacman -Qo filename
или dpkg -S filename
, но для pip
. Это существует? Или я должен использовать какую-то комбинацию pip
и grep
? В этом случае я не знаю, как перечислить все установленные файлы.
Вы можете попробовать с
pip list | tail -n +3 | cut -d" " -f1 | xargs pip show -f | grep "filename"
Затем ищите результаты, ища этот файл.
Вы можете использовать скрипт 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 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
Я написал более полную версию здесь, с абсолютными путями:
Попробуйте это!
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 будет жаловаться на сломанные трубы.