В дистрибутивах Linux на основе Debian pip обычно определяет пакеты Python, установленные apt/usr/lib/pythonX/dist-packages). Однако это не действует, например, для PyQt5 (PyQt5 не отображается при запуске pip list или pip freeze). Кто-нибудь знает почему?

С помощью Docker вы можете выполнить следующие шаги, чтобы воспроизвести проблему:

  • Запустите нестабильную версию Debian:

    docker run -it debian:unstable
    
  • Установите python3-pip и python3-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.

1
IngoHeimbach 8 Окт 2018 в 13:06

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)

Мы не хотим предоставлять файлы ".egg" в .deb. Однако мы хотим сделать «метаинформацию о яйцах» доступной, чтобы пользователи могли использовать яйца, если они того пожелают. Python> = 2.5 делает это по умолчанию в distutils. Для setup.py, основанного на setuptools, вам необходимо передать параметр "--single-version-ex external-managed" вызову "setup.py install".

2
Eddy Pronk 8 Окт 2018 в 11:15

Действительно, PyQt5 не отображается в выводе pip list. Вместо этого появятся pycairo и PyGObject.
Если вы выполните python3, а затем import PyQt5, он импортирует без ошибок. Я проверил его на контейнере докеров с базовым образом Ubuntu, однако он должен работать так же для 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
>>>
0
jar 8 Окт 2018 в 10:58