【问题标题】:How to find which pip package owns a file?如何找到哪个 pip 包拥有文件?
【发布时间】:2016-02-02 16:51:20
【问题描述】:

我有一个文件,我怀疑是由pip 安装的。 如何找到安装该文件的软件包?

换句话说,我正在寻找类似于pacman -Qo filenamedpkg -S filename 的命令,但用于pip。它存在吗?或者我应该使用pipgrep 的某种组合? 在那种情况下,我不知道如何列出所有安装的文件。

【问题讨论】:

  • “文件”是什么意思?一个模块?一个包裹?
  • @poke 在我的高清文件中,我有一个 .py 文件,我想知道我是否在几年前安装了一个将该文件复制到我的计算机中的软件包。 (实际上文件是/usr/bin/rst2html.py)但我的问题是一般怎么做。

标签: python pip


【解决方案1】:

你可以试试

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

然后搜索结果以查找该文件。

【讨论】:

  • 你为什么不在你的答案中添加一个grep,那不是一个完整的解决方案吗?
  • 谢谢,它几乎可以工作了。但是,对于我收到的大多数软件包,Files: Cannot locate installed-files.txt 是我的系统问题吗?
  • @KraZmAzzD:我认为pip list 包括不是由pip 本身安装的包,而是由您的系统包管理器安装的。这些通常不包括installed-files.txt 文件。
  • @Rörd grep 可能有效,但它需要上下文(多行)来获取实际的包名,而不仅仅是文件名。
  • 对于未来pip 版本的用户:s/pip list/pip list --format=legacy/ 如果您收到错误no such option: ----------------
【解决方案2】:

试试这个!

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

注意,如果你在grep中添加-q,一旦匹配到就会退出,然后pip会报错管道。

【讨论】:

    【解决方案3】:

    你可以像这样使用 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
    

    我在这里写了一个更完整的版本,带有绝对路径:

    https://github.com/nbeaver/pip_file_lookup

    【讨论】:

    猜你喜欢
    • 2016-06-17
    • 2019-09-15
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 2010-11-11
    相关资源
    最近更新 更多