[心得] 加快 pip 安裝重覆套件 wheel/cache

看板Python作者 (亮)時間11年前發表 (2014/07/25 13:23), 11年前編輯推噓5(501)
留言6則, 6人參與, 最新討論串1/1
很多人都會用虛擬環境(virtualenv 或內建的 venv) 來管理不同的專案中套件相依,但有些套件其實經常被使用的, 例如科學計算幾乎都要 numpy。它帶有 fortran、C 代碼, 還連結很多外部函數庫 MKL、LAPACK、ALTAS、BLAS、ARPACK, 有時裝好了也不確定是不是有正確連結到,十分費神。 或者像 ipython[all] 這樣的套件,裝起來可能也需要幾分鐘的時間。 底下算是幾個加速的方式:pip cache 以及 wheel 分享給大家。 TL;DR 設定環境變數 export PIP_USE_WHEEL=true export PIP_WHEEL_DIR="$HOME/.pip/wheel" export PIP_DOWNLOAD_CACHE="$HOME/.pip/cache" export PIP_FIND_LINKS="file://$PIP_WHEEL_DIR" 用 pip wheel <pkg_name> 做自己的 wheel 裝套件就會先看 wheel_dir 有沒有做好的 .whl 再看 cache 有沒有曾經下載過 達到加速安裝(但還是需要網路連線) Cache ----- 設定 export PIP_DOWNLOAD_CACHE="$HOME/.pip/cache" 把 PyPI 上找到的套件,下載在 cache 資料夾裡。 有新版本也會自動下載新的存著。 如果套件 release 就是用 wheel 格式的話也會存在 cache。 要注意 cache 檔名包含網址,有做 PyPI mirror 的話會存成不同檔案 Wheel ----- 算是目前推廣中的格式,不少套件都有採用了。 它是 binary release,所以少了安裝的過程會快很多, 針對 Python 版本、OSX/Win/Linux 32/64 製作專門的 .whl Linux wheel 因目前規格不處理 distro 而很少能直接下載用, 像 CentOS/Debian 外部函式庫的位置都不一樣,因此 並不會在公開像 PyPI 上找到。 新版 pip 都會預設優先使用 wheel,沒有的話可以加上 export PIP_USE_WHEEL=true 細節請參考 TP 大大的投影片: - We Buy Cheese in a Cheese Shop https://speakerdeck.com/uranusjr/we-buy-cheese-in-a-cheese-shop 自己的 wheel 自己做! """"""""""""""""""""" 如果今天開發環境是相似的(同台電腦、同樣設定的 VM) 就算套件沒有給 wheel 照樣可以自己做 設定下兩行之後可以少打很多參數, export PIP_WHEEL_DIR="$HOME/.pip/wheel" export PIP_FIND_LINKS="file://$PIP_WHEEL_DIR" PIP_WHEEL_DIR 給定做好的 wheel 要存哪 PIP_FIND_LINKS 則是 pip install 會來這目錄看有無現成的 首先要裝 wheel 這個套件 pip install wheel 接著安裝好自己想要包 wheel 的套件,以 <pkg_name> 為例, 安裝好 <pkg_name> 之後 pip wheel <pkg_name> 就會做出 <pkg_name>-<ver>-xxx.whl 在 wheel_dir 中。 製作過程會把 source 下載下來,但這不是重新編譯的意思。 製作完成之後,未來便可選擇用這個 .whl 安裝 <pkg_name> pip install <pkg_name>-<ver>-xxx.whl 在官網說明中,會看到這行 pip install --no-index --find-links=/local/wheels xxx.whl --no-index 表示不給它看 PyPI 有沒有新版,並強迫在 find_links 的目錄裡找 有設在環境變數中的話就不用多下 --find-links 了 沒有 --no-index 時,檢查 PyPI 有新版的話就會忽略本地舊版的 .whl 及 cache 結論 ---- 設定好之後,你可以建立一個 wheel_list.txt 然後 cat wheel_list.txt | xargs pip wheel 把常用的 wheel 都建好自用、送 VM 兩相宜。 看到 pip install ipython[all] 一行裝一個套件,20 秒內裝好 12 個套件的感覺真好。 參考 ---- - pip 官網: https://pip.pypa.io/ - wheel 官網: http://wheel.readthedocs.org/ 如果有寫錯什麼再麻煩多多指教(鞠躬) 說好的 Windows 呢? =================== 上述的所有功能在 Windows 上都能正常運作。 設定檔請寫在 %HOME%\pip\pip.ini 中 [global] find-links = C:\pip\wheels download_cache = C:\pip\cache [wheel] wheel-dir = C:\pip\wheels 請確定這些路徑存在且有權限。 在 Windows 上設定 Python ------------------------ (是不是要另外發一篇?) 如果用 Python 3.4 的話,使用官方的安裝程式, 裝完就有 setuptools 以及 pip 了。 虛擬環境用內建的就可以了 PS > py.exe -3.4 -m venv VENV_NAME PS > .\VENV_NAME\Scripts\Activate.ps1 (VENV_NAME) PS > 還是彩色的喔 :) Powershell PS1 權限 """"""""""""""""""" 如果 Activate.ps1 噴 error 的話,用管理員權限執行 PS > Set-ExecutionPolicy Unrestricted # 按 Y -- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.185.29.212 ※ 文章網址: http://www.ptt.cc/bbs/Python/M.1406294621.A.42B.html

07/25 23:43, , 1F
超實用!
07/25 23:43, 1F
※ 編輯: ccwang002 (167.220.232.35), 07/26/2014 17:08:09

07/27 05:48, , 2F
謝謝詳細講解~
07/27 05:48, 2F
※ 編輯: ccwang002 (167.220.232.35), 07/27/2014 17:52:57

07/28 15:20, , 3F
越來越多套件用 wheel 了,真的快,好厲害
07/28 15:20, 3F

07/30 00:21, , 4F
實用推!
07/30 00:21, 4F

07/30 14:14, , 5F
感謝~
07/30 14:14, 5F

07/31 11:10, , 6F
朝聖推
07/31 11:10, 6F
文章代碼(AID): #1JqbfTGh (Python)