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


403

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

Ответы:


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

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'
>>>
>>>

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.