Odpowiedzi:
sys.executable
zawiera pełną ścieżkę aktualnie działającego interpretera Pythona.
import sys
print(sys.executable)
co jest teraz udokumentowane tutaj
#!/usr/bin/env python3
zwróci poprawną pełną ścieżkę binarną przez sys.executable
. Być może wersja systemu operacyjnego lub Python zachowuje się nieco inaczej.
python
i python3
poleceń i drukowane prawidłowy plik wykonywalny.
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
_
to, że jest ustawiony przez powłokę. Ale nie trzeba go ustawiać, więc może to dać złą odpowiedź.
Istnieje kilka alternatywnych sposobów na znalezienie aktualnie używanego pytona w Linuksie: 1) which python
. 2) command -v python
polecenie 3) type python
polecenie
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'
>>>
>>>
python
z powłoki. Jeśli zaczniesz od wyraźnej innej ścieżki (np. /opt/python/2.5/bin/python
) Lub użyjesz, python3
a 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.
/usr/bin/env python
wykonanym jakoenv -i ./script
. W takim przypadku zwraca bieżący katalog roboczy.