Ответы:
sys.executable
содержит полный путь текущего запущенного интерпретатора Python.
import sys
print(sys.executable)
который сейчас задокументирован здесь
#!/usr/bin/env python3
вернет правильный полный двоичный путь через sys.executable
. Возможно, ваша версия ОС или Python ведет себя немного иначе.
python
и python3
командами , и он напечатал правильный исполняемый файл.
Просто отметив другой способ сомнительной полезности, используя os.environ
:
import os
python_executable_path = os.environ['_']
например
$ python -c "import os; print(os.environ['_'])"
/usr/bin/python
_
это устанавливается оболочкой. Но это не нужно устанавливать, так что это может дать неправильный ответ.
Есть несколько альтернативных способов выяснить, какой в настоящее время 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'
>>>
>>>
python
из оболочки. Если вы начинаете с явно другого пути (например /opt/python/2.5/bin/python
), или используете, python3
а затем запускаете эти команды python, все они дают неправильные ответы, и это не имеет ничего общего с тем, что вы не самый питонический способ, это просто неправильно.
/usr/bin/env python
выполняемой какenv -i ./script
. В этом случае он возвращает текущий рабочий каталог.