在 Windows 10 上使用 cygwin。當我在 cygwin bash shell 上輸入時:
$ python --version
Python 3.8.10
...我知道我擁有的默認 Python 是 3.8。但是,正在呼叫的實際可執行檔案是什么 - 或在哪里?明確地找到這有點困難;說,which告訴我:
$ which python
/usr/bin/python
...但如果我仔細觀察:
$ ls -la /usr/bin/python*
lrwxrwxrwx 1 user None 24 Oct 1 14:06 /usr/bin/python -> /etc/alternatives/python
lrwxrwxrwx 1 user None 13 Oct 1 14:04 /usr/bin/python2 -> python2.7.exe
-rwxr-xr-x 1 user None 9235 Jan 2 2021 /usr/bin/python2.7.exe
-rwxr-xr-x 1 user None 1685 Jan 2 2021 /usr/bin/python2.7-config
lrwxrwxrwx 1 user None 16 Oct 1 14:05 /usr/bin/python2-config -> python2.7-config
lrwxrwxrwx 1 user None 25 Oct 1 14:06 /usr/bin/python3 -> /etc/alternatives/python3
lrwxrwxrwx 1 user None 14 Oct 1 14:04 /usr/bin/python3.6 -> python3.6m.exe
-rwxr-xr-x 1 user None 10259 May 5 13:22 /usr/bin/python3.6m.exe
-rwxr-xr-x 1 user None 9747 May 20 12:07 /usr/bin/python3.8.exe
所以,事實證明/usr/bin/python它實際上是一個符號鏈接/etc/alternatives/python,它是一個帶有 XML 內容的小二進制檔案(編輯:錯誤,見下文);所以它不是在Python解釋器可執行檔案。
當然,我現在已經可以猜測最有可能是可執行檔案/usr/bin/python3.8.exe——但是,我想從 Python 本身明確地得到這個答案。
但是,如果我這樣做:
$ python -c 'import sys; print(sys.executable)'
/usr/bin/python
...我再次得到/usr/bin/python答案,這只是其他內容的符號鏈接,因此不是實際的可執行檔案。
有沒有辦法從 Python 本身檢索到實際 Python 解釋器可執行檔案的絕對路徑?
編輯:事實證明/etc/alternatives/python3是實際解釋器的符號鏈接:
$ ls -al /etc/alternatives/python3
lrwxrwxrwx 1 user None 18 Oct 1 14:06 /etc/alternatives/python3 -> /usr/bin/python3.8
...但是,我想知道 Python 本身是否有辦法告訴我這一點。
uj5u.com熱心網友回復:
您應該能夠使用 pathlib 決議符號鏈接,例如:
import sys
from pathlib import Path
executable = Path(sys.executable).resolve()
現在,我總是使用pathlib.Path物件來處理路徑。
或者,如果您更喜歡舊的 API,您仍然可以使用os.path,所以
import os.path
executable = os.path.realpath(sys.executable)
uj5u.com熱心網友回復:
用 os.path.realpath
import os
import sys
print(os.path.realpath(sys.executable))
或者
python -c 'import sys, os; print(os.path.realpath(sys.executable))'
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/310997.html
