Vollständigen Pfad des Python-Interpreters finden?

402

Wie finde ich den vollständigen Pfad des aktuell ausgeführten Python-Interpreters im aktuell ausgeführten Python-Skript?

vy32
quelle

Antworten:

607

sys.executable enthält den vollständigen Pfad des aktuell ausgeführten Python-Interpreters.

import sys

print(sys.executable)

was jetzt hier dokumentiert ist

Imran
quelle
1
Dies scheint bei Skripten mit einem /usr/bin/env pythonausgeführten Shebang nicht zu funktionieren env -i ./script. In diesem Fall wird das aktuelle Arbeitsverzeichnis zurückgegeben.
John Freeman
2
@ JohnFreeman: Ich habe dies auf einer GNU / Linux-Box mit GNU Coreutils 8.4 (env) und Python 3.4.2 versucht. #!/usr/bin/env python3gibt den korrekten vollständigen Binärpfad über zurück sys.executable. Möglicherweise verhält sich Ihre Betriebssystem- oder Python-Version etwas anders.
Kevinarpe
25
Beachten Sie, dass dies nicht den Namen des Python-Interpreters zurückgibt, wenn Python in eine Anwendung eingebettet ist.
mic_e
1
Ich habe dies mit dem Shebang für Python2 und Python3 versucht und es wurde die richtige ausführbare Datei gedruckt. Ich auch ohne shebang versucht und das Skript mit dem gerufene pythonund python3Befehlen und es gedruckt , um die richtige ausführbare Datei.
David Baucum
8

Ich stelle nur eine andere Art fragwürdiger Nützlichkeit fest os.environ:

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

z.B

$ python -c "import os; print(os.environ['_'])"
/usr/bin/python
Berühmte Garkin
quelle
2
nutzlos aber lustig :) (vielleicht auch nicht tragbar)
Eudoxos
2
Es scheint, dass dies _von der Shell festgelegt wird. Es muss jedoch nicht eingestellt werden, sodass dies die falsche Antwort geben kann.
vy32
2
Zu Ihrer Information: Wenn Sie sich in einem Jupyter-Notizbuch befinden, wird der Pfad zum Kernel-Launcher-Skript angezeigt.
Herr Fooz
2

Es gibt einige alternative Möglichkeiten, um herauszufinden, welche Python derzeit unter Linux verwendet wird: 1) which pythonBefehl. 2) command -v pythonBefehl 3) type pythonBefehl

In ähnlicher Weise wird unter Windows mit Cygwin auch das gleiche Ergebnis erzielt.

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)

Wenn Sie sich bereits in der Python-Shell befinden. Probieren Sie eines davon aus. Hinweis: Dies ist eine alternative Methode. Nicht der beste pythonische Weg.

>>>
>>> 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
quelle
5
"aus dem aktuell ausgeführten Python-Skript" schrieb der OP
nodakai
3
Bei Ihren Beispielen "bereits in der Python-Shell" wird davon ausgegangen, dass die gestartete Python-Shell genau das ist, was Sie erhalten, wenn Sie pythonaus der Shell eingeben. Wenn Sie mit einem explizit anderen Pfad beginnen (z. B. /opt/python/2.5/bin/python) oder python3diese Python-Befehle verwenden und dann ausführen, haben alle falsche Antworten hervorgebracht, und das hat nichts damit zu tun, dass Sie nicht die pythonischste Methode sind. Es ist einfach falsch.
Anthon