Python 3 не может импортировать сторонние пакеты

У меня есть версия 3.5.2 Python, и у меня есть pip3, таким образом, я сделал

sudo pip3 install pyqt5

Это было установлено в/usr/local/lib/python3.5/dist-packages

Однако, когда я ввожу свой интерпретатор python 3 и тип

import PyQt5

это дает мне ошибку, что это не может найти модуль по имени PyQt5.

Таким образом, я пытался добавить/usr/local/lib/python3.5/dist-packages путь к PYTHONPATH путем выполнения

export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.5/dist-packages

но это ничего не зафиксировало. Как я заставляю Python 3.5.2 обнаружить PyQt5?

2
задан 6 December 2016 в 23:27

1 ответ

Благодаря George I медленно добирался до ответа. Корень проблемы находится, в котором я установил свою версию Python 3.5.2 из источника, а не из диспетчера пакетов способности Ubuntu.

В основном, если Python установлен из источника, то, для поиска сторонних пакетов он использует /usr/local/lib/python3.5/site-packages, но если он был установлен с помощью apt, затем взгляды Python в /usr/local/lib/python3.5/dist-packages. Это должно удостовериться, что несколько версий Python не попадают в историю. Вот другой вопрос, который объясняет: , каково различие между dist-пакетами и пакетами сайта? .

Решение:

Моя установка Python3 изучала пакеты сайта и игнорировала dist-пакеты, таким образом, я добавил файл пути, чтобы заставить ее посмотреть в dist-пакетах также.

cd /usr/local/lib/python3.5/site-packages
sudo vim dist-packages.pth
(Press i to go into insert mode inside Vim)
../dist-packages
:x (and Press Enter/Return)

Теперь, когда Python смотрит в /site-packages, он находит dist-packages.pth, который заставляет его войти /dist-packages.

Другое Решение:

у Кого-то еще была проблема точно мой реверс, где их установка Python только смотрела в /dist-packages, таким образом, они использовали тот же самый метод как выше кроме вместо того, чтобы делать dist-packages.pth файл (содержащий ../dist-packages) в /site-packages, они сделали site-packages.pth файл (содержащий ../site-packages внутренний /dist-packages.

Проверка, если это работало:

простой способ проверить, работало ли это, состоит в том, чтобы войти в Ваш интерпретатор Python и распечатать sys.path. Это должно теперь содержать оба пути пакета:

charliebrown@playground:/usr/local/lib/python3.5/site-packages$ python3
Python 3.5.2 (default, Nov 19 2016, 02:36:25) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys; print(sys.path)
['', '/usr/local/lib/python35.zip', '/usr/local/lib/python3.5',     '/usr/local/lib/python3.5/plat-linux', '/usr/local/lib/python3.5/lib-dynload', 
'/usr/local/lib/python3.5/site-packages', '/usr/local/lib/python3.5/dist-packages']

я надеюсь, что это помогает кому-то однажды...

3
ответ дан 2 December 2019 в 02:49

Другие вопросы по тегам:

Похожие вопросы: