首頁  >  文章  >  後端開發  >  python安裝的套件如何尋找

python安裝的套件如何尋找

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼原創
2019-06-15 11:22:044771瀏覽

python是如何尋找套件的

相關推薦:《python影片

python安裝的套件如何尋找

##現在大家的電腦上很可能不只一個Python,還有更多的虛擬環境,導致安裝套件的時候,一不小心就忘了注意安裝套件的路徑。首先我們來解決找包包的問題,這個問題回答起來很簡單,但很多人不知道這個原理。假如你的Python解釋器的路徑是/bin/python,那麼你啟動Python互動環境或用這個解釋器執行腳本時,會預設尋找以下位置:

/ lib(標準函式庫路徑)

/lib/pythonX.Y/site-packages(三方函式庫路徑,X.Y是對應Python的主次版本號,如3.7, 2.6)

目前工作目錄(pwd指令的回傳結果)

這裡如果你用的是Linux上的預設Python,就是/usr,如果你是自己用預設選項編譯的,就是/usr/local。從上面第二條可以看到不同次版本號碼的Python的三方函式庫路徑不同,如果你把Python從3.6升級到3.7那麼之前裝的三方函式庫都沒辦法用了。當然你可以整個資料夾都拷貝過去,大部分情況不會出問題。

幾個有用的函數

sys.executable 目前使用的Python解釋器路徑

sys.path 目前套件的搜尋路徑清單

sys.prefix 目前使用的

#範例:

>>> import sys
>>> sys.executable'/home/frostming/.pyenv/versions/3.7.2/bin/python'
>>> sys.path
['', '/home/frostming/.pyenv/versions/3.7.2/lib/python37.zip',
 '/home/frostming/.pyenv/versions/3.7.2/lib/python3.7', 
 '/home/frostming/.pyenv/versions/3.7.2/lib/python3.7/lib-dynload', 
 '/home/frostming/.local/lib/python3.7/site-packages', 
 '/mnt/d/Workspace/pipenv', '/home/frostming/.pyenv/versions/3.7.2/lib/python3.7/site-packages']
 >>> sys.prefix'/home/frostming/.pyenv/versions/3.7.2'

使用環境變數新增搜尋路徑

#如果你的套件的路徑不存在上面列出的搜尋路徑清單裡,可以把路徑加到PYTHONPATH環境變數裡,多個路徑用:隔開(Windows用;)。

但要注意,避免把不同Python版本套件的路徑加到PYTHONPATH裡,例如PYTHONPATH=/home/frostming/.local/lib/python2.7/site-packages,因為PYTHONPATH中的路徑是優先於預設搜尋路徑,如果用Python 3的話會有相容性問題。

順便說下PATH是用來找執行程式的搜尋路徑,如果你在終端機中執行指令my_cmd,系統會依序掃描PATH中的路徑,看my_cmd是否存在於該路徑下,所以如果提示找不到程式或指令無法識別,那你就要看路徑是否加到PATH裡了。

Python是如何安裝套件的

現在用安裝Python套件基本上是用的pip,就算你是用pipenv,poetry,底層依然是pip,一律適用。如果你沒有安裝pip請參考這裡,如果安裝了還無法用pip指令請參考上一節。

運行pip有兩種方式:

pip ...
python -m pip ...

第一種方式和第二種方式大同小異,區別是第一種方式使用的Python解釋器是寫在pip裡的,一般情況下,如果你的pip路徑是/bin/pip,那麼Python路徑對應的就是/bin/python。第二種方式則明確地指定了Python的位置。這條規則,對於所有Python的可執行程式都是適用的。流程如下圖所示。

python安裝的套件如何尋找

那麼,不加任何自訂配置時,使用pip安裝套件就會自動安裝到/lib/pythonX.Y/site-packages下( 是從上一段裡得到的),可執行程式安裝到/bin下,如果需要在命令列直接使用my_cmd運行,記得加到PATH。

pip中更改安裝位置的選項

--prefix PATH,替換為給定的值--root ROOT_PATH,在前面加上ROOT_PATH,例如--root /home/frostming,就會從/usr變成/home/frostming/usr--target TARGET,直接指定安裝位置到TARGET

#虛擬環境

虛擬環境就是為了隔離不同專案的依賴套件,使他們安裝到不同的路徑下,以防止依賴衝突的問題。了解Python是如何安裝套件的機制之後就不難理解虛擬環境(virtualenv, venv模組)的原理。其實,執行virtualenv myenv會複製一個新的Python解釋器到myenv/bin下,並創建好myenv/lib,myenv/lib/pythonX.Y/site-packages等目錄(venv模組不是用的複製,但結果基本上一樣)。執行source myenv/bin/activate以後會把myenv/bin塞到PATH前面,讓這個複製出來的Python解釋器最優先被搜尋到。這樣,後續安裝套件時,就會是myenv了,因此實現了安裝路徑的隔離。

總結#

看到這裡大家可以發現,關於套件路徑搜尋最重要的就是這個路徑前綴,而這個值又是從使用的Python解釋器路徑推導出來的。所以要找到包的路徑,只需要知道解釋器的路徑就可以了,如果遇到改變包的路徑,只需要通過正確的PATH設置,指定你想要的Python解釋器即可。

現在回到開頭的三個問題,大家會解決了嗎?在留言區寫出你的排查步驟或解決方法。

本文範例皆使用Unix路徑習慣,若為Windows系統則應做適當改動,如/bin應為/Scripts↩

以上是python安裝的套件如何尋找的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:怎麼操作Excel下一篇:怎麼操作Excel