Trova il percorso completo dell'interprete Python?


402

Come trovo il percorso completo dell'interprete Python attualmente in esecuzione all'interno dello script Python attualmente in esecuzione?

Risposte:


607

sys.executable contiene il percorso completo dell'interprete Python attualmente in esecuzione.

import sys

print(sys.executable)

che ora è documentato qui


1
Questo non sembra funzionare da script con uno shebang /usr/bin/env pythoneseguito come env -i ./script. In tal caso restituisce la directory di lavoro corrente.
John Freeman,

2
@JohnFreeman: ho provato questo su un box GNU / Linux con GNU coreutils 8.4 (env) e Python 3.4.2. #!/usr/bin/env python3restituirà il percorso binario completo corretto tramite sys.executable. Forse la versione del tuo sistema operativo o Python si comporta in modo leggermente diverso.
kevinarpe,

25
Nota che questo non restituirà il nome dell'interprete Python se Python è incorporato in qualche applicazione.
mic_e

1
Ho provato questo con Shebang per Python2 e Python3 e ha stampato l'eseguibile corretto. Ho anche provato senza shebang e chiamato lo script con l' pythone python3comandi ed è stampato il file eseguibile corretto.
David Baucum,

8

Basta notare un diverso modo di discutibile utilità, usando os.environ:

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

per esempio

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

2
inutile ma divertente :) (forse anche non portatile)
eudoxos

2
Sembra che _sia impostato dalla shell. Ma non è necessario impostarlo, quindi questo potrebbe dare la risposta sbagliata.
vy32,

2
Cordiali saluti, quando si trova in un notebook Jupyter, questo fornisce il percorso per lo script di avvio del kernel.
Fooz,

2

Ci sono alcuni modi alternativi per capire il which pythoncomando python attualmente usato in Linux: 1) . 2) command -v pythoncomando 3) type pythoncomando

Allo stesso modo su Windows con Cygwin risulterà lo stesso.

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)

Se sei già nella shell di Python. Prova qualcuno di questi. Nota: questo è un modo alternativo. Non è il miglior modo pitonico.

>>>
>>> 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
"dall'interno dello script Python attualmente in esecuzione" ha scritto l'OP
nodakai il

3
I tuoi esempi "già nella shell python", tutti presumono che la shell python avviata sia quella che ottieni se digiti pythondalla shell. Se inizi con un percorso esplicito diverso (ad esempio /opt/python/2.5/bin/python), o usi python3e poi esegui quei comandi di Python, tutti hanno prodotto risposte errate e questo non ha nulla a che fare con il non essere il modo più pitonico, è semplicemente sbagliato.
Anthon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.