¿Encontrar la ruta completa del intérprete de Python?

402

¿Cómo encuentro la ruta completa del intérprete de Python actualmente en ejecución desde el script de Python actualmente en ejecución?

vy32
fuente

Respuestas:

607

sys.executable contiene la ruta completa del intérprete de Python actualmente en ejecución.

import sys

print(sys.executable)

que ahora está documentado aquí

Imran
fuente
1
Esto no parece funcionar a partir de scripts con un shebang /usr/bin/env pythonejecutado como env -i ./script. En ese caso, devuelve el directorio de trabajo actual.
John Freeman
2
@JohnFreeman: probé esto en una caja GNU / Linux con GNU coreutils 8.4 (env) y Python 3.4.2. #!/usr/bin/env python3devolverá la ruta binaria completa correcta a través de sys.executable. Quizás su sistema operativo o versión de Python se comporta de manera ligeramente diferente.
kevinarpe
25
Tenga en cuenta que esto no devolverá el nombre del intérprete de Python si Python está incrustado en alguna aplicación.
mic_e
1
Intenté esto con el shebang para python2 y python3 e imprimió el ejecutable correcto. También probé sin tinglado y se llama el script con el pythony python3comandos y se imprime el ejecutable correcto.
David Baucum
8

Simplemente observando una forma diferente de utilidad cuestionable, usando os.environ:

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

p.ej

$ python -c "import os; print(os.environ['_'])"
/usr/bin/python
calabaza famosa
fuente
2
inútil pero divertido :) (quizás tampoco portátil)
eudoxos
2
Parece que _lo establece el shell. Pero no es necesario establecerlo, por lo que esto podría dar la respuesta incorrecta.
vy32
2
Para su información, cuando está en un cuaderno de Jupyter, esto le da la ruta al script de inicio del kernel.
Sr. Fooz
2

Hay algunas formas alternativas de descubrir que el python utilizado actualmente en Linux es: 1) which pythoncomando. 2) command -v pythoncomando 3) type pythoncomando

Del mismo modo, en Windows con Cygwin también resultará igual.

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 ya estás en el shell de Python. Prueba cualquiera de estos. Nota: esta es una forma alternativa. No es la mejor manera pitónica.

>>>
>>> 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
fuente
55
"desde dentro del script Python actualmente en ejecución", escribió el OP
nodakai
3
Sus ejemplos de "ya en el shell de Python", todos asumen que el shell de Python iniciado es lo que obtiene si escribe pythondesde el shell. Si comienza con una ruta diferente explícita (p /opt/python/2.5/bin/python. Ej. ), O usa python3y luego ejecuta esos comandos de Python, todos ellos produjeron respuestas incorrectas y eso no tiene nada que ver con no ser la forma más pitónica, simplemente está mal.
Anthon