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?

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


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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.