天天看點

歸納一下 pip install 與 conda install 的差別以及使用經驗

        近幾天安裝好conda開始設定pycharm使用虛拟環境,并用pyinstaller對一個腳本進行打包,腳本在pycharm裡能正常運作,但打包成exe檔案後運作報錯說子產品找不到,報錯資訊忘截屏了,大概是openpyxl.xxx.write()這樣子,我懷疑是openpyxl子產品沒有打包進去,但用conda list指令和pip list指令都能查到該環境裡有這個子產品,再加上打包後exe檔案比較小才5M多,于是懷疑打包時沒有導入到正确的路徑或檔案,因為記得當時是用conda install安裝的包,于是猜想會不會是conda insatll和pip install安裝的包有異呢?于是幹脆用conda uninstall openpyxl解除安裝了,重新用 pip install openpyxl安裝,然後再重新pyinstaller打包,打包完成後一看exe檔案有7M多,再運作,一切正常了。于是我想總結一下有關conda install和pip installr的使用注意,在網上認真找資料學習一番,對這兩種安裝方式的差別進行歸納如下:

一、差別綜述:

1、 關于支援語言:

        pip 是 python 官方推薦的包下載下傳工具,但是隻能安裝python包;

        conda 是一個跨平台(支援linux, mac, win)的通用包和環境管理器,它除了支援python外,還能安裝各種其他語言的包,例如 C/C++, R語言等。

2、關于拉取來源:

        pip 從PyPI(Python Package Index)上拉取資料。上面的資料更新更及時,涵蓋的内容也更加全面;

        conda 從 Anaconda.org 上拉取資料。雖然Anaconda上有一些主流Python包,但在數量級上明顯少于PyPI,缺少一些小衆的包。

        總結:pypi上有超150000多個包,而Anaconda.org 上隻有1500多包,可見兩者的差異之大。

3、關于包的格式:

        pip 裡的軟體包為wheel版或源代碼發行版。wheel屬于已編譯發新版的一種,下載下傳好後可以直接使用;而源代碼發行版必須要經過編譯生成可執行程式後才能使用,編譯的過程是在使用者的機子上進行的。

        conda 裡的軟體包都是二進制檔案,下載下傳後即可使用,不需要經過編譯。

4、關于功能使用:

        pip 沒有内置支援環境隔離,隻能借助其他工具例如virtualenv or venv實作環境隔離。

        conda 有能力直接建立隔離的環境,并且能對所有conda install的包以及版本進行統一管理。

        總結:這點勿需多言,裝conda就是沖着管理包和做虛拟環境來的。

5、關于解決包的依賴關系:

        pip安裝包時,盡管也對目前包的依賴做檢查,但是并不保證目前環境的所有包的所有依賴關系都同時滿足。當某個環境所安裝的包越來越多,産生沖突的可能性就越來越大。

        conda會檢查目前環境下所有包之間的依賴關系,保證目前環境裡的所有包的所有依賴都會被滿足。

        總結:但是當兩者混用時(因為conda install的包源不足不得不混用pip install),conda不會管理pip install的包,有時會産生沖突。

  1. 庫的儲存位置:

        在conda虛拟環境下使用 pip install 安裝的庫: 如果使用系統的的python,則庫會被儲存在 ~/.local/lib/python3.x/site-packages 檔案夾中;如果使用的是conda内置的python,則會被儲存到 anaconda3/envs/current_env/lib/site-packages中。

        conda install 安裝的庫都會放在anaconda3/pkgs目錄下。這樣的好處就是,當在某個環境下已經下載下傳好了某個庫,再在另一個環境中還需要這個庫時,就可以直接從pkgs目錄下将該庫複制至新環境而不用重複下載下傳。

        總結:既然我們使用了conda,建議就是解除安裝系統原來裝的python,因為conda本身帶了python,兩者同時使用很容易産生沖突!(血淚教訓啊,曾因為這個導緻pycharm使用conda建立虛拟環境總是報錯無法成功)。

二、經驗總結

1、 推薦使用conda建立虛拟環境,不但能做到環境隔離,還能做到python版本和各種包的統一管理,還你一個清爽的開發環境;

        對于python版本管理有個疑問,比如我安裝的conda自帶python3.9版,雖然在pycharm裡使用conda設定環境為python3.8版,用conda list檢視的結果是3.8版,但如果用conda info檢視顯示卻仍然為python3.9版,并且用pyinstaller打包後exe檔案運作時仍然需要去C:\Users\Administrator\AppData\Local\Temp(pyinstaller打包後的exe檔案運作時會在這個目錄下臨時建立一個_MEI45482類似的目錄)下調用python39.dll才能繼續運作,坑人的是windows7不支援python3.9以上版本,pyinstaller打包後的exe檔案運作根本不會建立這個目錄,導緻運作不了報錯,後來隻得重裝帶3.8版pythonr的conda才能解決問題!

歸納一下 pip install 與 conda install 的差別以及使用經驗

 2、下載下傳安裝第三方包:

        能用conda安裝的就先用conda(conda下載下傳是真的慢,就算換源了還是慢,下大點的檔案還容易失敗,但誰讓人家有統一管理的優勢,下載下傳一次之後可以無限次複用是真的香!),不行再使用pip安裝。

        但也要小心兩者之間的沖突,因為conda的包有通用包,有可能下的包不是python的包而導緻不能使用(就象本文導語所述的例子),這時可考慮解除安裝conda的包用pip重裝。

 [參考文章]:

《全面總結 pip install 與 conda install 的使用差別》

《pip install 和conda install有什麼差別嗎?》