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 python3zwróci poprawną pełną ścieżkę binarną przez sys.executable. Być może wersja systemu operacyjnego lub Python zachowuje się nieco inaczej.
pythoni python3poleceń 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 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'
>>>
>>>
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.
/usr/bin/env pythonwykonanym jakoenv -i ./script. W takim przypadku zwraca bieżący katalog roboczy.