为什么`pip list`不显示Debian / Ubuntu上`apt`安装的所有Python软件包?

时间:2018-10-08 10:06:35

标签: python ubuntu pip debian

在基于Debian的Linux发行版上,pip通常会检测apt(在/usr/lib/pythonX/dist-packages中)安装的Python软件包。但是,例如,这对于PyQt5无效(运行PyQt5pip listpip freeze不会显示)。有人知道为什么吗?

使用Docker,您可以运行以下步骤来重现该问题:

  • 运行Debian不稳定版本:

    docker run -it debian:unstable
    
  • 安装python3-pippython3-pyqt5

    apt update
    apt install --no-install-recommends python3-pip python3-pyqt5
    
  • 运行

    pip3 list
    

    仅列出pip

  • 安装python3-requests

    apt install --no-install-recommends python3-requests
    

    然后运行

    pip3 list
    
    再次

    requests软件包将被列出。

2 个答案:

答案 0 :(得分:2)

首先,查看软件包安装了哪些文件:

dpkg-query -L python3-requests

在输出中,您将看到:

/usr/lib/python3/dist-packages/requests-2.18.4.egg-info/PKG-INFO

此文件开头为:

Metadata-Version: 1.1
Name: requests
Version: 2.18.4

python3-pyqt5软件包不包含此类文件。

我可以想象,一些Debian软件包包含了某些元数据。

Debian常见问题解答指出:(https://wiki.debian.org/Python/FAQ

  

我们不想在.deb中提供“ .egg”文件。但是我们想要   使“鸡蛋元信息”可用,以便用户可以使用   鸡蛋,如果他们愿意的话。 Python> = 2.5默认在distutils中执行该操作。   对于基于setuptools的setup.py,您需要传递该选项   “-单一版本外部管理”调用“ setup.py install”。

答案 1 :(得分:0)

PyQt5确实没有出现在pip list输出中。而是显示pycairoPyGObject
如果执行python3然后运行import PyQt5,它将导入而不会出现任何错误。我已经在带有Ubuntu基本映像的docker容器上对其进行了检查,但是它对于Debian应该也可以使用。

root@d6b7f119b352:/# python3
Python 3.6.7rc1 (default, Sep 27 2018, 09:51:25)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import PyQt5
>>>

>>> from PyQt5.QtWidgets import QApplication, QWidget, QLabel
>>>