Temukan path lengkap interpreter Python?

402

Bagaimana cara menemukan path lengkap interpreter Python yang sedang berjalan dari dalam skrip Python yang saat ini mengeksekusi?

ay32
sumber

Jawaban:

607

sys.executable berisi path lengkap dari interpreter Python yang sedang berjalan.

import sys

print(sys.executable)

yang sekarang didokumentasikan di sini

Imran
sumber
1
Ini sepertinya tidak berfungsi dari skrip dengan shebang /usr/bin/env pythondieksekusi sebagai env -i ./script. Dalam hal ini mengembalikan direktori kerja saat ini.
John Freeman
2
@JohnFreeman: Saya mencoba ini pada kotak GNU / Linux dengan GNU coreutils 8.4 (env) dan Python 3.4.2. #!/usr/bin/env python3akan mengembalikan jalur biner penuh yang benar melalui sys.executable. Mungkin versi OS atau Python Anda berperilaku sedikit berbeda.
kevinarpe
25
Perhatikan bahwa ini tidak akan mengembalikan nama juru bahasa Python jika Python disematkan dalam beberapa aplikasi.
mic_e
1
Saya mencoba ini dengan shebang untuk python2 dan python3 dan mencetak executable yang benar. Saya juga mencoba tanpa shebang dan memanggil script dengan pythondan python3perintah dan itu mencetak executable yang benar.
David Baucum
8

Hanya memperhatikan cara lain dari kegunaan yang dipertanyakan, menggunakan os.environ:

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

misalnya

$ python -c "import os; print(os.environ['_'])"
/usr/bin/python
gin terkenal
sumber
2
tidak berguna tapi lucu :) (mungkin juga tidak portabel)
eudoxos
2
Tampaknya _diatur oleh shell. Tapi itu tidak perlu diatur, jadi ini bisa memberikan jawaban yang salah.
vy32
2
FYI, ketika di notebook Jupyter, ini memberikan path ke script launcher kernel.
Tuan Fooz
2

Ada beberapa cara alternatif untuk mengetahui python yang saat ini digunakan di Linux adalah: 1) which pythonperintah. 2) command -v pythonperintah 3) type pythonperintah

Demikian pula pada Windows dengan Cygwin juga akan menghasilkan hal yang sama.

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)

Jika Anda sudah berada di shell python. Coba salah satu dari ini. Catatan: Ini adalah cara alternatif. Bukan cara pythonic terbaik.

>>>
>>> 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
sumber
5
"dari dalam skrip Python yang sedang dieksekusi" tulis OP
nodakai
3
Contoh "sudah ada di shell python" Anda, semua menganggap bahwa shell python dimulai adalah apa yang Anda dapatkan jika Anda mengetik pythondari shell. Jika Anda mulai dengan jalur berbeda yang eksplisit (misalnya /opt/python/2.5/bin/python), atau menggunakan python3dan kemudian menjalankan perintah python itu, semuanya menghasilkan jawaban yang salah dan itu tidak ada hubungannya dengan tidak menjadi cara yang paling pythonic, itu jelas salah.
Anthon