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


403

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

Réponses:


608

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


1
Cela ne semble pas fonctionner à partir de scripts avec un shebang /usr/bin/env pythonexécuté en tant que env -i ./script. Dans ce cas, il renvoie le répertoire de travail actuel.
— John Freeman

2
@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 python3renverra le chemin binaire complet correct via sys.executable. Peut-être que votre version OS ou Python se comporte légèrement différemment.
— kevinarpe

25
Notez que cela ne renverra pas le nom de l'interpréteur Python si Python est incorporé dans une application.
— mic_e

1
J'ai essayé cela avec le shebang pour python2 et python3 et il a imprimé l'exécutable correct. J'ai aussi essayé sans tralala et a appelé le script avec les pythonet les python3commandes et l'exécutable correct imprimé.
— David Baucum

8

Notant simplement une manière différente d’utilité douteuse, en utilisant os.environ:

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

par exemple

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

2
inutile mais drôle :) (peut-être aussi pas portable)
— eudoxos

2
Il semble que cela _soit réglé par le shell. Mais cela n'a pas besoin d'être réglé, donc cela pourrait donner la mauvaise réponse.
— vy32

2
Pour info, dans un cahier Jupyter, cela donne le chemin vers le script de lancement du noyau.
— M. Fooz

2

Il existe plusieurs façons alternatives de comprendre le python actuellement utilisé sous Linux: 1) which pythoncommande. 2) command -v pythoncommande 3) type pythoncommande

De même, sous Windows avec Cygwin, le résultat sera également 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 n'importe lequel d'entre eux. Remarque: Il s'agit d'une autre méthode. Pas la meilleure façon pythonique.

>>>
>>> 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'
>>>
>>>

5
"depuis le script Python en cours d'exécution", a écrit l'OP
— nodakai

3
Vos exemples "déjà dans le shell python" supposent tous que le shell python démarré est ce que vous obtenez si vous tapez à pythonpartir du shell. Si vous commencez avec un chemin différent explicite (par exemple /opt/python/2.5/bin/python), ou utilisez python3puis exécutez ces commandes python, toutes ont produit des réponses incorrectes et cela n'a rien à voir avec le fait de ne pas être la manière la plus pythonique, c'est tout simplement faux.
— Anthon
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.