How do I know which pip package a file belongs to?

I have a file that I suspect was installed using pip . How can I find in which package this file is installed?

In other words, I'm looking for a command similar to pacman -Qo filename or dpkg -S filename , but for pip . Does it exist? Or should I use some combination of pip and grep ? In this case, I do not know how to list all installed files.

+16
python pip
source share
3 answers

You can try with

 pip list | tail -n +3 | cut -d" " -f1 | xargs pip show -f | grep "filename" 

Then search for the results by looking for this file.

+7
source share

You can use a Python script like this:

 #!/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) 

Usage looks like this:

 $ python lookup_file.py requests/__init__.py requests 

I wrote a more complete version here, with absolute paths:

https://github.com/nbeaver/pip_file_lookup

+2
source share

Try it!

 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 

Note that if you add -q to grep , it will exit as soon as a match appears, and then pip will complain about broken pipes.

0
source share

All Articles