O Python 3 não pode importar pacotes de terceiros

1

Eu tenho Python versão 3.5.2 e tenho pip3, então eu fiz

sudo pip3 install pyqt5

Isso foi instalado em /usr/local/lib/python3.5/dist-packages

No entanto, quando eu digito meu intérprete do python 3 e digito

import PyQt5

dá-me um erro que não consegue encontrar o módulo chamado PyQt5.

Então, tentei adicionar o caminho /usr/local/lib/python3.5/dist-packages a PYTHONPATH fazendo

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

mas isso não consertou nada. Como faço Python 3.5.2 detectar o PyQt5?

    
por Shadowfax 06.12.2016 / 05:43

1 resposta

3

Graças a George eu lentamente cheguei à resposta. A raiz do problema está em que eu instalei minha versão do Python 3.5.2 de uma fonte ao invés do gerenciador de pacotes aptitude do Ubuntu.

Basicamente, se o Python é instalado a partir de uma fonte, então, para procurar por pacotes de terceiros, ele usa /usr/local/lib/python3.5/site-packages , mas se foi instalado usando apt , o Python procura /usr/local/lib/python3.5/dist-packages . Isso é para garantir que as várias versões do Python não fiquem entrelaçadas. Aqui está outra pergunta que explica: qual é a diferença entre as diferenças? pacotes e pacotes de sites? .

Solução:

Minha instalação do Python3 estava procurando em pacotes de sites e ignorando dist-packages, então eu adicionei um arquivo de caminho para fazê-lo olhar dentro de dist-packages também.

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)

Agora, quando o Python procura dentro de /site-packages , ele encontra dist-packages.pth , o que faz com que ele entre em /dist-packages .

Outra solução:

Alguém teve um problema exatamente Ao contrário do meu, onde a instalação do Python só olhava dentro de /dist-packages , eles usavam exatamente o mesmo método acima, exceto que em vez de fazer um arquivo dist-packages.pth (contendo ../dist-packages ) dentro de /site-packages , eles fizeram site-packages.pth arquivo (contendo ../site-packages dentro de /dist-packages .

Verifique se funcionou:

A maneira fácil de verificar se isso funcionou é entrar em seu interpretador Python e imprimir sys.path. Agora deve conter os dois caminhos de pacotes:

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

Espero que isso ajude alguém um dia ...

    
por Shadowfax 06.12.2016 / 21:26