web-dev-qa-db-fra.com

Est-ce que "python3" et "python" utilisent des variables de chemin différentes?

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

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

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

8
null

Vous avez absolument raison, ils utilisent différents PYTHONPATH s.

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

Pour que Numpy fonctionne, vous pouvez taper:

Sudo apt-get install python3-numpy

Si vous voulez savoir exactement où un paquet est conservé, vous pouvez regarder l'attribut __path__ du module objects:

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

Vous pouvez également installer python3-pip, puis exécuter pip3 install whatever pour installer les packages pour Python 3 avec Pip , pour les packages qui ne sont pas disponibles sous Ubuntu sous le nom python3-whatever.

Si vous ne comprenez pas la différence entre distutils, setuptools, easy_install, pip et le reste, utilisez pip. C'est le cool. :)

8
Stefano Palazzo

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

Python 2 et Python 3 sont suffisamment différents pour que les packages soient é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 à différents emplacements et sont emballés séparément - python-numpy pour Python 2, python3-numpy pour Python 3 Si vous voulez utiliser 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']
4
muru

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

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

Pour pouvoir importer numpy avec les deux interpréteurs, veillez à installer les packages correspondants:

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