Do “python3” e “python” usam variáveis de caminho diferentes?

8

O comando python abre um ambiente Python 2.7.6. Se eu quiser interpretar um script do Python 3, preciso reescrever o comando para python3 .

Acabei de instalar o pacote numpy . Para testar a instalação bem-sucedida, executo o comando import numpy . Funciona bem ao usar o comando python . No entanto, python3 não encontra o pacote.

Como isso é possível? Esses dois comandos usam diferentes variáveis caminho ? Como posso mudar o comportamento?

    
por null 18.03.2016 / 10:57

3 respostas

7

Você está absolutamente certo, eles usam diferentes PYTHONPATH s.

Você pode pensar no Python 2.xe no Python 3.x como ambientes de programação completamente diferentes. E sim, eles armazenam seus pacotes em locais diferentes.

Para ficar numpy trabalhando, você pode digitar:

sudo apt-get install python3-numpy

Se você quiser descobrir onde exatamente um pacote é mantido, pode ver os objetos do módulo __path__ attribute:

>>> import numpy
>>> numpy.__path__
['/usr/local/lib/python3.5/site-packages/numpy']

Você também pode instalar python3-pip e, em seguida, executar pip3 install whatever para instalar pacotes para o Python 3 com Pip , para pacotes que não estão disponíveis no Ubuntu como python3-whatever .

Caso você esteja confuso sobre a diferença entre distutils, setuptools, easy_install, pip e o resto, use pip. Essa é a legal. :)

    
por Stefano Palazzo 18.03.2016 / 11:08
4

Não, eles usam o mesmo PATH . No entanto, o problema this não está com o PATH .

O Python 2 e o Python 3 são suficientemente diferentes para que os pacotes sejam escritos separadamente para os dois. Você não pode usar um pacote escrito para um com o outro.

No Ubuntu, esses módulos são armazenados em locais diferentes e são empacotados separadamente - python-numpy para Python 2, python3-numpy para Python 3. Se você quiser numpy com o Python 3, instale python3-numpy .

$ python3 -c 'import sys; print (sys.path)'
['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/home/muru/.local/lib/python3.4/site-packages', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']
$ python2 -c 'import sys; print (sys.path)'
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
    
por muru 18.03.2016 / 11:06
3

De fato, ambos estão importando módulos de locais diferentes:

  • Python2.7: /usr/lib/python2.7/dist-packages/numpy/
  • Python3.x: /usr/lib/python3/dist-packages/numpy/

Para poder importar numpy com ambos os intérpretes, certifique-se de instalar os pacotes correspondentes:

  • Python2.7: sudo apt-get install python-numpy
  • Python3.x: sudo apt-get install python3-numpy
por Sylvain Pineau 18.03.2016 / 11:05