646 votes

Trouver le chemin complet de l'interpréteur Python ?

Comment trouver le chemin complet de l'interpréteur Python en cours d'exécution à partir du script Python en cours d'exécution ?

974voto

Imran Points 20117

sys.executable contient le chemin complet de l'interpréteur Python en cours d'exécution.

import sys

print(sys.executable)

qui est maintenant documenté ici

2 votes

Cela ne semble pas fonctionner à partir de scripts avec un shebang. /usr/bin/env python exécuté comme env -i ./script . Dans ce cas, il renvoie le répertoire de travail actuel.

2 votes

@JohnFreeman : J'ai essayé ceci sur une boîte GNU/Linux avec GNU coreutils 8.4 (env) et Python 3.4.2. #!/usr/bin/env python3 retournera le chemin binaire complet correct via sys.executable . Peut-être votre système d'exploitation ou votre version de Python se comporte-t-il de manière légèrement différente.

45 votes

Notez que cela ne retournera pas le nom de l'interpréteur Python si Python est intégré dans une application.

15voto

famousgarkin Points 3484

Il s'agit d'une méthode différente dont l'utilité est discutable, utilisant os.environ :

import os
python_executable_path = os.environ['_']

par exemple

$ python -c "import os; print(os.environ['_'])"
/usr/bin/python

7 votes

Inutile mais drôle :) (peut-être aussi non portable)

4 votes

Il semble que _ est défini par le shell. Mais il n'est pas nécessaire qu'il soit défini, ce qui pourrait donner une mauvaise réponse.

2 votes

Pour info, quand on est dans un carnet Jupyter, cela donne le chemin vers le lanceur de noyau script.

1voto

kvivek Points 2387

Il y a quelques autres moyens de savoir quel est le python actuellement utilisé sous Linux :

  1. which python commandement.
  2. command -v python commande
  3. type python commande

De même, sous Windows avec Cygwin, le résultat sera le même.

kuvivek@HOSTNAME ~
$ which python
/usr/bin/python

kuvivek@HOSTNAME ~
$ whereis python
python: /usr/bin/python /usr/bin/python3.4 /usr/lib/python2.7 /usr/lib/python3.4        /usr/include/python2.7 /usr/include/python3.4m /usr/share/man/man1/python.1.gz

kuvivek@HOSTNAME ~
$ which python3
/usr/bin/python3

kuvivek@HOSTNAME ~
$ command -v python
/usr/bin/python

kuvivek@HOSTNAME ~
$ type python
python is hashed (/usr/bin/python)

Si vous êtes déjà dans le shell python. Essayez l'une des méthodes suivantes. Remarque : il s'agit d'une méthode alternative. Ce n'est pas la meilleure méthode python.

>>> import os
>>> os.popen('which python').read()
'/usr/bin/python\n'
>>>
>>> os.popen('type python').read()
'python is /usr/bin/python\n'
>>>
>>> os.popen('command -v python').read()
'/usr/bin/python\n'
>>>
>>>

Si vous n'êtes pas sûr du chemin réel de la commande python et qu'il est disponible dans votre système, utilisez la commande suivante.

pi@osboxes:~ $ which python
/usr/bin/python
pi@osboxes:~ $ readlink -f $(which python)
/usr/bin/python2.7
pi@osboxes:~ $ 
pi@osboxes:~ $ which python3
/usr/bin/python3
pi@osboxes:~ $ 
pi@osboxes:~ $ readlink -f $(which python3)
/usr/bin/python3.7
pi@osboxes:~ $

15 votes

"à l'intérieur du script Python en cours d'exécution" écrit le PO

16 votes

Vos exemples "déjà dans le shell python", supposent tous que le shell python démarré est celui que vous obtenez si vous tapez python de la coquille. Si vous commencez avec un chemin d'accès explicitement différent (par ex. /opt/python/2.5/bin/python ), ou utiliser python3 et ensuite lancer ces commandes python, tous ont produit des réponses incorrectes et cela n'a rien à voir avec le fait que ce n'est pas la manière la plus pythique, c'est tout simplement faux.

4 votes

Ne répond pas à la question "Comment trouver le chemin complet de l'interpréteur Python en cours d'exécution à partir du script Python en cours d'exécution ?".

-4voto

Essayez le où se trouve commandement :

whereis python

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X