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?

vy32
la source

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

Imran
la source
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
célèbregarkin
la source
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'
>>>
>>>
kvivek
la source
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