"Python3" e "python" usam diferentes variáveis ​​de caminho?


9

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

Acabei de instalar o pacote numpy . A fim de testar a instalação bem sucedida, eu executar o comando import numpy. Funciona bem ao usar o pythoncomando No entanto, python3não encontra o pacote.

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


pode estar relacionado / útil: stackoverflow.com/a/53767029/52074
Trevor Boyd Smith

Respostas:


9

Você está absolutamente certo, eles usam PYTHONPATHs diferentes .

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 que o funcionamento do numpy funcione, você pode digitar:

sudo apt-get install python3-numpy

Se você deseja descobrir onde exatamente um pacote é mantido, pode ver o __path__atributo de objetos do módulo :

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

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

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


2
Eles não usam PYTHONPATH diferente, mas python2 usa apenas pacotes no $ PREFIX / lib / python2 * e python3 apenas aqueles em $ PREFIX / lib / python3 *.
Dalloliogm

4

Não, eles usam o mesmo PATH. No entanto, esse problema não está no PATH.

Python 2 e Python 3 são suficientemente diferentes para que os pacotes tenham que ser 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-numpypara Python 2, python3-numpypara Python 3. Se você quiser ficar satisfeito 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']

3

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

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

Para poder importar numpycom os dois intérpretes, instale os pacotes correspondentes:

  • Python2.7: sudo apt-get install python-numpy
  • Python3.x: sudo apt-get install python3-numpy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.