Знайти повний шлях інтерпретатора Python?


402

Як знайти повний шлях поточного інтерпретатора Python з поточного сценарію Python?

Відповіді:


607

sys.executable містить повний шлях поточного інтерпретатора Python.

import sys

print(sys.executable)

що зараз тут задокументовано


1
Схоже, це не працює зі сценаріями, /usr/bin/env pythonвиконаними як шебанг як env -i ./script. У такому випадку він повертає поточний робочий каталог.
Джон Фріман

2
@JohnFreeman: Я спробував це на вікні GNU / Linux з Core / Javascript GNU 8.4 (env) та Python 3.4.2. #!/usr/bin/env python3поверне правильний повний бінарний шлях через sys.executable. Можливо, ваша ОС чи версія Python поводяться дещо інакше.
кевінарпе

25
Зауважте, що це не поверне ім'я інтерпретатора Python, якщо Python вбудований у якусь програму.
mic_e

1
Я спробував це з шебангом для python2 та python3, і він надрукував правильний виконуваний файл. Я також спробував з не притоном і назвав сценарій з pythonі python3командами , і він надрукував правильний виконуваний файл.
Девід Баукум

8

Просто зазначивши інший спосіб сумнівної корисності, використовуючи os.environ:

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

напр

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

2
марний, але смішний :) (можливо, також не портативний)
eudoxos

2
Здається, що _встановлена ​​оболонка. Але його не потрібно встановлювати, тому це може дати неправильну відповідь.
vy32

2
FYI, перебуваючи в зошиті Юпітера, це дає шлях до сценарію запуску ядра.
Містер Фооз

2

Існує кілька альтернативних способів з'ясувати поточно використаний python в Linux: 1) which pythonкоманда. 2) command -v pythonкоманда 3) type pythonкоманда

Так само в Windows з Cygwin також вийде те саме.

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)

Якщо ви вже в оболонці пітона. Спробуйте будь-кого із них. Примітка. Це альтернативний спосіб. Не найкращий пітонічний спосіб.

>>>
>>> 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
"зсередини виконуваного сценарію Python" написав ОП
nodakai

3
Ваші приклади "вже в оболонці python", всі припускають, що запущена оболонка python - це те, що ви отримуєте, якщо вводити pythonз оболонки. Якщо ви починаєте з явного іншого шляху (наприклад /opt/python/2.5/bin/python), або використовуєте, python3а потім запускаєте ці команди python, всі вони давали неправильні відповіді, і це не має нічого спільного з тим, що це не самий пітонічний спосіб, це просто неправильно.
Антон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.