Znajdź pełną ścieżkę interpretera języka Python?

402

Jak znaleźć pełną ścieżkę aktualnie działającego interpretera Pythona w ramach aktualnie wykonywanego skryptu Python?

vy32
źródło

Odpowiedzi:

607

sys.executable zawiera pełną ścieżkę aktualnie działającego interpretera Pythona.

import sys

print(sys.executable)

co jest teraz udokumentowane tutaj

Imran
źródło
1
To nie wydaje się działać ze skryptów z shebang /usr/bin/env pythonwykonanym jako env -i ./script. W takim przypadku zwraca bieżący katalog roboczy.
John Freeman
2
@JohnFreeman: Próbowałem tego na komputerze GNU / Linux z GNU coreutils 8.4 (env) i Pythonem 3.4.2. #!/usr/bin/env python3zwróci poprawną pełną ścieżkę binarną przez sys.executable. Być może wersja systemu operacyjnego lub Python zachowuje się nieco inaczej.
kevinarpe
25
Zauważ, że to nie zwróci nazwy interpretera Pythona, jeśli Python jest osadzony w jakiejś aplikacji.
mic_e
1
Próbowałem tego z shebang dla python2 i python3 i wydrukowałem poprawny plik wykonywalny. Próbowałem też bez shebang i nazywa skrypt z pythoni python3poleceń i drukowane prawidłowy plik wykonywalny.
David Baucum,
8

Zwracając uwagę na inny sposób wątpliwej przydatności, wykorzystując os.environ:

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

na przykład

$ python -c "import os; print(os.environ['_'])"
/usr/bin/python
Famousgarkin
źródło
2
bezużyteczne, ale zabawne :) (być może również nieprzenośne)
eudoxos
2
Wygląda na _to, że jest ustawiony przez powłokę. Ale nie trzeba go ustawiać, więc może to dać złą odpowiedź.
vy32
2
Do twojej wiadomości, gdy jest w notatniku Jupyter, daje to ścieżkę do skryptu uruchamiania jądra.
Pan Fooz,
2

Istnieje kilka alternatywnych sposobów na znalezienie aktualnie używanego pytona w Linuksie: 1) which python. 2) command -v pythonpolecenie 3) type pythonpolecenie

Podobnie w systemie Windows z Cygwin również spowoduje to samo.

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)

Jeśli jesteś już w powłoce pytona. Wypróbuj dowolną z nich. Uwaga: jest to alternatywny sposób. Nie najlepszy sposób na 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
źródło
5
„z poziomu aktualnie wykonywanego skryptu Python” napisał OP
nodakai
3
W przykładach „już w powłoce python” wszyscy zakładają, że uruchomiona powłoka python jest tym, co otrzymujesz, gdy piszesz pythonz powłoki. Jeśli zaczniesz od wyraźnej innej ścieżki (np. /opt/python/2.5/bin/python) Lub użyjesz, python3a następnie uruchomisz te polecenia w języku Python, wszystkie wygenerowały niepoprawne odpowiedzi i nie ma to nic wspólnego z tym, że nie jest to najbardziej pythonowy sposób, to po prostu źle.
Anthon