最近遇到個問題,在外網被擋住的情況下,如何在內網(離線環境)以最省力的方式安裝三方庫及其依賴包。
正常情況的下,如果我們要在離線環境下安裝有依賴的軟件包會出現以下情況:
pip install yyy 安裝yyy包
-> error, requirement xxx 報錯,缺失依賴包 xxx
-> pip install xxx 安裝依賴包 xxx
-> pip install yyy 安裝yyy包
-> success 成功
下面我以離線模式下安裝scipy為例,安裝scipy有個前置需求那就是numpy,如果在沒裝numpy的情況下安裝scipy會出現報錯的情況。
安裝指令
python -m pip install scipy-1.6.3-cp37-cp37m-win_amd64.whl

如此我需要先安裝numpy在安裝scipy才可以成功,但這畢竟太麻煩了,如果能在我安裝scipy的時候它自動把numpy裝上就更好了。
於是我在網上查找的很多方法終於pip官方文檔中看到了個驚喜。
- PIP
-
--no-index -
Ignore package index (only looking at --find-links URLs instead).
-
-f,--find-links<url> -
If a URL or path to an html file, then parse for links to archives such as sdist (.tar.gz) or wheel (.whl) files. If a local path or file:// URL that’s a directory, then look for archives in the directory listing. Links to VCS project URLs are not supported.
簡單翻譯就是:
--no-index:
忽略軟件包索引(僅查看--find-links URL)。
--find-links <url>:
如果是指向html文件的URL或路徑,則解析到諸如sdist(.tar.gz)或wheel(.whl)等文件的鏈接。如果目錄是本地路徑或file:// URL,則在目錄列表中查找檔案。不支持指向VCS項目URL的鏈接。
顯而易見我們可以組合這兩個command來實現當我安裝 scipy 時他 --no-index 指令會阻止pip默認的索引位置(pypi.org)而--find-links會使pip在指定目錄檢索是否有 scipy 包以及其依賴包 numpy 並安裝,這樣我就不用敲兩次pip install了。
說了這么多,直接亮代碼。
pip install --no-index --find-links=指定的路徑 scipy==1.6.3
當然不僅是單包也可以批量安裝多個包,指令如下: requirement.txt
pip install --no-index --find-links=指定的路徑 -r requirement.txt
結果如下:

媽媽再也不用擔心我在跑回圈了!一條指令解放雙手!
也是第一次寫博客,如果本篇內容有不對的地方歡迎大家指出我會重新修改。
我們的征途是星辰大海
