Encontrar o caminho completo do intérprete Python?

402

Como localizo o caminho completo do interpretador Python atualmente em execução no script Python atualmente em execução?

vy32
fonte

Respostas:

607

sys.executable contém o caminho completo do interpretador Python em execução no momento.

import sys

print(sys.executable)

que agora está documentado aqui

Imran
fonte
11
Isso não parece funcionar a partir de scripts com um shebang /usr/bin/env pythonexecutado como env -i ./script. Nesse caso, ele retorna o diretório de trabalho atual.
31815 John Freeman
2
@ JohnFreeman: Eu tentei isso em uma caixa GNU / Linux com GNU coreutils 8.4 (env) e Python 3.4.2. #!/usr/bin/env python3retornará o caminho binário completo correto via sys.executable. Talvez sua versão do sistema operacional ou Python se comporte de maneira um pouco diferente.
Kevinarpe 22/05
25
Observe que isso não retornará o nome do interpretador Python se o Python estiver incorporado em algum aplicativo.
mic_e
11
Eu tentei isso com o shebang para python2 e python3 e ele imprimiu o executável correto. Eu também tentei sem shebang e chamou o script com o pythone python3comandos e imprimiu o executável correto.
David Baucum 10/10/19
8

Apenas observando uma maneira diferente de utilidade questionável, usando os.environ:

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

por exemplo

$ python -c "import os; print(os.environ['_'])"
/usr/bin/python
Famousgarkin
fonte
2
inúteis, mas engraçado :) (talvez também não portátil)
Eudoxo
2
Parece que _é definido pelo shell. Mas não precisa ser definido, portanto, isso pode dar a resposta errada.
vy32
2
FYI, quando em um notebook Jupyter, fornece o caminho para o script do iniciador do kernel.
Sr. Fooz
2

Existem algumas maneiras alternativas de descobrir que o python atualmente usado no Linux é: 1) which pythoncomando. 2) command -v pythoncomando 3) type pythoncomando

Da mesma forma No Windows com Cygwin também resultará o mesmo.

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 você já está no shell python. Tente qualquer um desses. Nota: Esta é uma maneira alternativa. Não é o melhor caminho pitônico.

>>>
>>> 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
fonte
5
"de dentro do script Python atualmente em execução" escreveu o OP
nodakai 12/12/16
3
Seus exemplos "já no shell python" assumem que o shell python iniciado é o que você obtém se digitar pythonno shell. Se você começar com um caminho diferente explícito (por exemplo /opt/python/2.5/bin/python), ou usar python3e, em seguida, executar esses comandos python, todos eles produziram respostas incorretas e isso não tem nada a ver com não ser o caminho mais pitônico, isso é completamente errado.
Anthon