How To Find Which Pip Package Owns A File?
I have a file that I suspect was installed by pip. How can I find which package installed that file? In other words, I'm looking for a command similar to pacman -Qo filename or dp
Solution 1:
You could try with
pip list | tail -n +3 | cut -d" " -f1 | xargs pip show -f | grep "filename"
Then search through the results looking for that file.
Solution 2:
You can use a python script like this:
#!/usr/bin/env pythonimport 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 metadatasif 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'selif dist.has_metadata('installed-files.txt'):
paths = dist.get_metadata_lines('installed-files.txt')
else:
paths = []
if MYPATH in paths:
print(dist.project_name)
Usage looks like this:
$ python lookup_file.py requests/__init__.py
requests
I wrote a more complete version here, with absolute paths:
Solution 3:
Try this!
find_pkg_by_filename(){ for pkg in $(pip list | cut -d" " -f1) ; doif pip show -f "$pkg" | grep "$1" ; thenecho"=== Above files found in package $pkg ===" ; fi ; done ; }
find_pkg_by_filename somefilename
Note that if you add -q
to the grep
, it will exit as soon as there's a match, and then pip will complain about broken pipes.
Post a Comment for "How To Find Which Pip Package Owns A File?"