Anaconda 是一個面向數據科學的 Python 發行版,它打包了 Conda、Python 和一堆機器學習和人工智能相關和經常使用的包,並且還能夠用來安裝一些非 Python 編寫的庫。對於科學計算相關的用途很是方便,開箱即用。看起來很適合實驗室或是學校機房使用……html
對於常規的 Python 開發來講,Anaconda 過重了,並且主要面向科學計算領域,可是精簡版的 Miniconda 倒是一個很好的虛擬環境和依賴管理工具。python
更重要的是 Miniconda 兼容三個主流操做系統,並且不一樣平臺使用一樣的命令和接口(Conda 4.6 以上)。這大概算是我的偏好,由於我總在寫東西給別人看,因此老是喜歡兼容主流操做系統而且接口統一的解決方案。並且另外一方面 pyenv、virtualenvwrapper、direnv 等等相關替代工具都沒有原生 Windows 支持。 git
先來理清幾個概念:github
相關資源:shell
首先你須要訪問下載頁面下載對應操做系統的安裝包進行安裝,Python 版本選擇你想做爲默認選項(base version)的版本。而後打開 Windows 下的 Anaconda Prompt 或是 Anaconda Powershell Prompt,Linux 或 macOS 直接使用終端程序。app
下面是一些關鍵用法介紹,詳細內容能夠閱讀 Conda 文檔。機器學習
使用 conda create 命令建立虛擬環境,使用 --name 選項(-n)指定虛擬環境名稱:工具
$ conda create --name foo複製代碼
使用 conda info 命令查看當前環境名稱、Python 版本、虛擬環境文件夾位置、Conda 版本等等各類信息:學習
$ conda info複製代碼
使用 --envs 選項(-e)查看全部已建立的虛擬環境。在列出的虛擬環境中,使用星號(*)標識的是當前激活的虛擬環境:ui
$ conda info --envs複製代碼
使用 conda activate 命令激活虛擬環境,添加虛擬環境名做爲參數:
$ conda activate foo複製代碼
激活之後會在命令行提示器前顯示虛擬環境名稱,好比:
(foo) $複製代碼
不添加虛擬環境名稱,就會從新激活基礎環境(base):
$ conda activate複製代碼
在建立虛擬環境的時候,可使用 python 參數指定 Python 版本。假設你使用的 Miniconda 默認版本是 Python 3.7,若是你想建立一個 Python 2.7 的虛擬環境,使用下面的命令:
$ conda create --name snakes python=2.7複製代碼
你能夠在虛擬環境名加上標識方便識別 Python 版本,好比:
$ conda create --name snakes-py27 python=2.7複製代碼
由於 Conda 安裝庫的時候默認使用 Conda 本身的倉庫,這裏包含的 720 多個庫除了流行的 Python 包外大可能是數據科學相關的包。因此,更好的選擇是使用官方 PyPI 倉庫,這樣能夠確保你使用到最近更新的包,並且不會出現有些包找不到的狀況。
咱們要作的就是隻用 Conda 的 Python 版本和虛擬環境管理功能,不用它來管理依賴。依賴管理(安裝、卸載、更新等)仍然使用 pip 進行,或是進一步搭配 pip-tools 來管理依賴。
你須要在 conda 環境內使用下面的命令安裝 pip:
$ conda install pip複製代碼
或是統一使用下面的命令格式建立虛擬環境:
$ conda create --name bar pip複製代碼
這樣在執行 pip 命令時會使用虛擬環境內的 pip,而不是系統全局的 pip。這樣作的反作用是會產生幾個多餘的依賴。
除此以外,你也能夠搭配使用 Poetry。Poetry 默認會自動建立虛擬環境,因此須要關閉 Poetry 自動建立虛擬環境的設定,執行下面的命令便可:
$ poetry config settings.virtualenvs.create false複製代碼
按照我目前掌握到的信息,Miniconda 的優缺點總結以下:
優勢
缺點
既然一個 Miniconda 就能很好的勝任 Python 版本管理和虛擬環境管理的任務,爲何要用 pyenv+virtualenv+virtualenvwrapper 呢?遺憾的就是依賴管理功能不夠完善,和 pip/Poetry 搭配使用則可能會有潛在的衝突。因此,推薦能接受 Conda+pip/Poetry 這種搭配的人使用;推薦使用 Python 作數據科學相關工做的人使用。
對比之下,最穩定的解決方案大概仍是 virtualenv+pip+其餘工具……
(若是你發現了錯誤描述、有不一樣見解和想要補充的信息,歡迎評論。)
(3)