¿"Python3" y "python" usan diferentes variables de ruta?

9

El comando pythonabre un entorno Python 2.7.6. Si quiero interpretar un script Python 3, necesito reescribir el comando python3.

Acabo de instalar el paquete numpy . Para probar la instalación exitosa, ejecuto el comando import numpy. Funciona bien cuando se usa el pythoncomando. Sin embargo, python3no encuentra el paquete.

¿Cómo es esto posible? ¿Estos dos comandos usan diferentes variables de ruta ? ¿Cómo puedo cambiar el comportamiento?

nulo
fuente
podría estar relacionado / útil: stackoverflow.com/a/53767029/52074
Trevor Boyd Smith

Respuestas:

9

Tienes toda la razón, usan diferentes PYTHONPATHs.

Puede pensar en Python 2.xy Python 3.x como entornos de programación completamente diferentes. Y sí, almacenan sus paquetes en diferentes lugares.

Para comenzar a trabajar, puede escribir:

sudo apt-get install python3-numpy

Si desea averiguar dónde se guarda exactamente un paquete, puede ver el __path__atributo de objetos del módulo :

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

También puede instalar python3-pipy luego ejecutar pip3 install whateverpara instalar paquetes para Python 3 con Pip , para paquetes que no están disponibles en Ubuntu como python3-whatever.

En caso de que esté confundido acerca de la diferencia entre distutils, setuptools, easy_install, pip y el resto, use pip. Ese es el genial. :)

Stefano Palazzo
fuente
2
No usan PYTHONPATH diferente, sino que python2 usa solo paquetes en $ PREFIX / lib / python2 * y python3 solo aquellos en $ PREFIX / lib / python3 *.
dalloliogm
4

No, ellos usan lo mismo PATH. Sin embargo, este problema no es con el PATH.

Python 2 y Python 3 son lo suficientemente diferentes como para que los paquetes tengan que escribirse por separado para ambos. No puede usar un paquete escrito para uno con el otro.

En Ubuntu, estos módulos se almacenan en diferentes ubicaciones y se empaquetan por separado: python-numpypara Python 2, python3-numpypara Python 3. Si desea un numpy con Python 3, instálelo 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']
muru
fuente
3

De hecho, ambos están importando módulos desde diferentes ubicaciones:

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

Para poder importar numpycon ambos intérpretes, asegúrese de instalar sus paquetes correspondientes:

  • Python2.7: sudo apt-get install python-numpy
  • Python3.x: sudo apt-get install python3-numpy
Sylvain Pineau
fuente