«Python3» et «python» utilisent-ils des variables de chemin différentes?

9

La commande pythonouvre un environnement Python 2.7.6. Si je veux interpréter un script Python 3, je dois réécrire la commande dans python3.

Je viens d'installer le paquet numpy . Afin de tester l'installation réussie, j'exécute la commande import numpy. Cela fonctionne bien lorsque vous utilisez la pythoncommande. Cependant, python3ne trouve pas le package.

Comment est-ce possible? Ces deux commandes utilisent-elles des variables de chemin différentes ? Comment puis-je changer le comportement?

nul
la source
pourrait être lié / utile: stackoverflow.com/a/53767029/52074
Trevor Boyd Smith

Réponses:

9

Vous avez absolument raison, ils utilisent différents PYTHONPATHart.

Vous pouvez considérer Python 2.x et Python 3.x comme des environnements de programmation complètement différents. Et oui, ils stockent leurs colis dans différents endroits.

Pour faire fonctionner numpy, vous pouvez taper:

sudo apt-get install python3-numpy

Si vous voulez savoir où exactement un paquet est conservé, vous pouvez regarder l' __path__attribut des objets du module :

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

Vous pouvez également installer python3-pippuis exécuter pip3 install whateverpour installer des packages pour Python 3 avec Pip , pour des packages qui ne sont pas disponibles dans Ubuntu en tant que python3-whatever.

Dans le cas où vous êtes confus quant à la différence entre distutils, setuptools, easy_install, pip et le reste, utilisez pip. Voilà le cool. :)

Stefano Palazzo
la source
2
Ils n'utilisent pas PYTHONPATH différent, mais python2 utilise uniquement les packages dans $ PREFIX / lib / python2 * et python3 uniquement ceux dans $ PREFIX / lib / python3 *.
dalloliogm du
4

Non, ils utilisent la même chose PATH. Cependant, ce problème ne concerne pas le PATH.

Python 2 et Python 3 sont suffisamment différents pour que les packages doivent être écrits séparément pour les deux. Vous ne pouvez pas utiliser un package écrit pour l'un avec l'autre.

Dans Ubuntu, ces modules sont stockés dans différents emplacements et sont emballés séparément - python-numpypour Python 2, python3-numpypour Python 3. Si vous voulez numpy avec Python 3, installez 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
la source
3

En effet, les deux importent des modules depuis différents emplacements:

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

Pour pouvoir importer numpyavec les deux interprètes, assurez-vous d'installer leurs packages correspondants:

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