Найти полный путь интерпретатора Python?

403

Как мне найти полный путь работающего в данный момент интерпретатора Python из текущего исполняемого скрипта Python?

vy32
источник

Ответы:

608

sys.executable содержит полный путь текущего запущенного интерпретатора Python.

import sys

print(sys.executable)

который сейчас задокументирован здесь

Имран
источник
1
Похоже, что это не работает из сценариев с Shebang, /usr/bin/env pythonвыполняемой как env -i ./script. В этом случае он возвращает текущий рабочий каталог.
Джон Фриман,
2
@JohnFreeman: я пробовал это на коробке GNU / Linux с GNU coreutils 8.4 (env) и Python 3.4.2. #!/usr/bin/env python3вернет правильный полный двоичный путь через sys.executable. Возможно, ваша версия ОС или Python ведет себя немного иначе.
Кевинарпе
25
Обратите внимание, что это не вернет имя интерпретатора Python, если Python встроен в какое-либо приложение.
mic_e
1
Я попробовал это с помощью shebang для python2 и python3, и он напечатал правильный исполняемый файл. Я также попытался с не притоном и назвал сценарий с pythonи python3командами , и он напечатал правильный исполняемый файл.
Дэвид Баукум
8

Просто отметив другой способ сомнительной полезности, используя os.environ:

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

например

$ python -c "import os; print(os.environ['_'])"
/usr/bin/python
famousgarkin
источник
2
бесполезно, но смешно :) (возможно, также не портативно)
eudoxos
2
Кажется, _это устанавливается оболочкой. Но это не нужно устанавливать, так что это может дать неправильный ответ.
vy32
2
К вашему сведению, в записной книжке Jupyter это указывает путь к сценарию запуска ядра.
Мистер Фуз
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)

Если вы уже находитесь в оболочке 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'
>>>
>>>
kvivek
источник
5
«из исполняемого в данный момент скрипта Python» написал ОП
nodakai
3
Все ваши примеры «уже в оболочке python» предполагают, что запущенная оболочка python - это то, что вы получите, если наберете pythonиз оболочки. Если вы начинаете с явно другого пути (например /opt/python/2.5/bin/python), или используете, python3а затем запускаете эти команды python, все они дают неправильные ответы, и это не имеет ничего общего с тем, что вы не самый питонический способ, это просто неправильно.
Энтон