How to find which pip package owns a file?

前端 未结 3 666
梦毁少年i
梦毁少年i 2021-01-03 23:47

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

相关标签:
3条回答
  • 2021-01-04 00:23

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

    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

    0 讨论(0)
  • 2021-01-04 00:24

    Try this!

    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 the grep, it will exit as soon as there's a match, and then pip will complain about broken pipes.

    0 讨论(0)
  • 2021-01-04 00:30

    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.

    0 讨论(0)
提交回复
热议问题