Python多環境管理神器(Anaconda)
為了解決python多版本共存,解決不同版本之間的依賴衝突,虛擬環境隔離等問題,我們前面介紹了venv、virtualenv、virtualenvwrapper、pyenv、pipenv等眾多工具。下面我們再介紹一個非常強大的多環境管理神器——Anaconda。
Anaconda (強大)
1、什麼是Anaconda
Anaconda是專註於數據分析的Python發行版本,包含了conda、Python等190多個科學包及其依賴項。Anaconda通過管理工具包、開發環境、Python版本,大大簡化了你的工作流程。不僅可以方便地安裝、更新、卸載工具包,而且安裝時能自動安裝相應的依賴包,同時還能使用不同的虛擬環境隔離不同要求的項目。安裝Acaconda默認的Python是2.7;安裝Acaconda3默認的Python是3.6
2、什麼是Conda
Conda是一個開源的包、虛擬環境管理器,可以用於在同一個機器上安裝不同版本的軟件包及其依賴,並能夠在不同的環境之間切換,它的包管理類似PIP。
packages 管理: 可以使用 conda 來安裝、更新 、卸載工具包 ,並且它更關注於數據科學相關的工具包。在安裝 anaconda 時就預先集成了像 Numpy、Scipy、 pandas、Scikit-learn 這些在數據分析中常用的包。另外值得一提的是,conda 並不僅僅管理Python的工具包,它也能安裝非python的包。比如在新版的 Anaconda 中就可以安裝R語言的集成開發環境 Rstudio。
虛擬環境管理: 在conda中可以建立多個虛擬環境,用於隔離不同項目所需的不同版本的工具包,以防止版本上的衝突。對糾結於 Python 版本的同學們,我們也可以建立 Python2 和 Python3 兩個環境,來分別運行不同版本的 Python 代碼。
3、安裝Anaconda:
去官網下載指定的版本的Anaconda://repo.anaconda.com/archive/
我們下載的是Anaconda3-5.2.0-Linux-x86_64.sh
wget //repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh
安裝前,先安裝bunzip2依賴包,否則後面安裝會報錯:bunzip2: command not found
yum install -y bzip2
運行該腳本,進行安裝
bash Anaconda3-5.2.0-Linux-x86_64.sh
在安裝的過程中,會問你安裝路徑,直接回車默認就可以了,默認安裝到了/root/anaconda3目錄下。
有個地方問你是否將anaconda安裝路徑加入到環境變量(.bashrc)中,輸入yes,默認的是no,
最後一步有一個詢問你是否安裝vscode,emm如果你沒有需要就輸入no,畢竟在服務器裏面都是用vim編輯器的,沒必要多裝一個。
安裝完成如下圖:
配置anaconda環境變量:
默認是安裝在/root/anaconda3/下的,如果不是,請修改路徑
vim /etc/profile ## Anaconda export PATH=$PATH:/root/anaconda3/bin
加載使立即生效
source /etc/profile
注意:如果之前服務器上已經編譯安裝過python了,將它重命名,否則系統會自動找到之前編譯的python3環境,而不會使用Anaconda里的python環境。
# 注釋掉之前編譯安裝使用的python3.9環境 mv /usr/local/python3.9/ /usr/local/python3.9_bak
測試Anaconda安裝是否正確:
# 查看python3的路徑是否正確 which python3 # 啟動python3看環境是否正確 python3
如下圖:
至此,Anaconda安裝完成。
Conda自身管理
更新conda
# 更新anaconda conda update conda
更新anaconda元數據包
# 更新anaconda元數據包 conda update anaconda
.condarc
刪除 .condarc 文件這個文件默認沒有,只有你執行過 conda config 命令以後才會自動建立。該文件是conda的配置文件
是YAML格式。比如你可以設置安裝包的渠道,是否自動更新conda,是否允許其他渠道等設置。
4、Python環境管理
# 創建一個新環境,並制定python解釋器版本,沒有會自動下載 # python27 是環境名稱 # python=2.7 是要安裝的包和版本,默認會為我們尋找2.7.x中的最新版本 # anaconda 是創建環境時同時要安裝的包,這個可以不寫 conda create -n python27 python=2.7 anaconda conda create -n python36 python=3.6 conda create -n python37 python=3.7 # 更新Python,進入某個環境運行下面的命令,將更新當前環境的Python到最新分支版本。比如當前是3.5,更新後將會到最新的3.X conda update python
5、虛擬環境管理
查看當前託管的所有虛擬環境列表
[root@linux121 ~]# conda env list # conda environments: # base * /root/anaconda3
創建虛擬環境
# 創建一個名為myvenv 的環境,指定Python版本是3.10 # (不用管是3.10.x,conda會為我們自動尋找3.10.x中的最新版本) conda create --name myvenv python=3.10
虛擬環境不會在當前環境下創建虛擬環境目錄,所有的虛擬環境目錄默認放在:
/root/anaconda3/envs/
激活虛擬環境
activate myvenv # for Windows source activate myvenv # for Linux & Mac conda activate myvenv # 新版使用這個
退出虛擬環境
conda deactivate
如下圖:
導出依賴包:
導出環境,它會把當前環境中安裝的包以及版本號都導出去,這樣你就可以拿到另外的機器上來重新構建一個相同的環境
導出的內容包括環境名稱,安裝渠道,該環境安裝的包以及版本號。
# 首先進入名稱叫做python36環境 conda activate myvenv # 導出當前環境到指定文件 conda env export > environment.yml # 通過環境文件建立環境,不需要指定環境名稱,因為文件中包含名稱字段 conda env create -f environment.yml
刪除虛擬環境
# 方式一: conda env remove --name myvenv # 方式二: conda remove -n myvenv --all
克隆虛擬環境:
conda create -n myvenv2 --clone myvenv
克隆如下圖:
6、包管理
安裝包
conda install --name myvenv scipy # 安裝包到指定環境中 conda install scipy # 安裝包到當前環境中 conda install scipy=0.15.0 # 安裝指定版本的包,到當前環境 conda install scipy curl # 安裝多個包 conda install -c anaconda django # -c是指定渠道名稱,也就是用哪個渠道安裝django。
卸載包:
# 卸載包 conda remove 包名 # 刪除當前環境中的指定包 conda remove -n myvenv numpy # 刪除指定環境中的指定包 conda remove -n myvenv --all # 刪除指定環境中的所有包,等同於刪除環境
更新包:
conda update 包名 # 更新當前環境指定的包 conda update -n myvenv numpy # 更新指定環境中的指定包
查看當前packages:
# 查看當前已經安裝的packages conda list conda list -n myvenv # 查看指定環境中安裝的所有包
如下圖:
查找可安裝的包:
精確查找
conda search --full-name <package_full_name> # 例如: conda search --full-name python
模糊查找:
conda search jieba # 支持正則 conda search *py*
7、鏡像源管理
conda默認使用的是官方鏡像源,是在國外,安裝下載會很慢,所以強烈建議切換為國內鏡像源。
查看當前鏡像源配置
# 查看當前的鏡像源 conda config --show channels # 查看詳細信息 conda config --show
如下圖:default的地址默認就是官方地址,//repo.anaconda.com/pkgs/main
添加清華大學鏡像源
# 添加Anaconda的TUNA鏡像 conda config --add channels //mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels //mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ # 設置搜索時顯示通道地址,這個可以不加,只是為了看一下是否從鏡像站下載 conda config --set show_channel_urls yes
再次查看鏡像地址:
conda config --show channels
如下圖;
添加第三方鏡像源:
## Conda Forge conda config --add channels //mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ ## msys2 conda config --add channels //mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/ ## bioconda conda config --add channels //mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ ## menpo conda config --add channels //mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/ ## pytorch conda config --add channels //mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
其他鏡像源:
清華大學其他鏡像源地址://mirrors.tuna.tsinghua.edu.cn/anaconda/
刪除鏡像源
conda config --remove channels <URL> ## 刪除原來的舊鏡像 # 如下 conda config --remove channels default conda config --remove channels //mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --remove channels //mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
注意:如果切換鏡像源後,安裝過程出現報錯:
CondaHTTPError: HTTP 000 CONNECTION FAILED for url <//mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/noarch/repodata.json>
解決辦法:參考://www.freesion.com/article/67891423758/
1、首先把鏡像源地址,從https替換為http
2、刪除/root/.condarc中的- default
即可解決
.condarc文件說明:
文件這個文件默認沒有,只有你執行過 conda config 命令以後才會自動建立。該文件是conda的配置文件,是YAML格式。比如你可以設置安裝包的渠道,是否自動更新conda,是否允許其他渠道等設置。下面是我的配置文件說明。這些不是必須的。但是在國內建議設置channels,這個在上面已經說過。所以通常你不需要關注這個文件。
參考://mirror.tuna.tsinghua.edu.cn/help/anaconda/
文件樣例如下:
vim /root/.condarc
channels: - defaults show_channel_urls: true default_channels: - //mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - //mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - //mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: //mirrors.tuna.tsinghua.edu.cn/anaconda/cloud msys2: //mirrors.tuna.tsinghua.edu.cn/anaconda/cloud bioconda: //mirrors.tuna.tsinghua.edu.cn/anaconda/cloud menpo: //mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: //mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch-lts: //mirrors.tuna.tsinghua.edu.cn/anaconda/cloud simpleitk: //mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
清除索引緩存:
運行 conda clean -i 清除索引緩存,保證用的是鏡像站提供的索引。
conda clean -i
8、當conda中沒有這個包時:
會報錯,如下:
PackagesNotFoundError: The following packages are not available from current channels:
方法一:使用pip安裝
# 安裝不在conda或者acaconda的包,當你安裝的包不在conda管理範圍的時候可以使用pip來安裝 conda install pip # 首先在當前環境中安裝pip pip install jieba # 其次在通過PIP命令在當前環境中安裝包
方法二:搜索包含該安裝包的渠道
anaconda search jieba
搜索如下圖:
選擇其中一個版本,我們選擇了conda-forge/jieba模塊
展示該版本的信息
anaconda show conda‐forge/jieba
如下圖,顯示了安裝渠道路徑
找到對應的渠道信息,如上面最後一行,直接進行安裝即可
conda install --channel //conda.anaconda.org/conda-forge jieba
如果最開始你就知道要這個渠道模塊,也可以這樣直接安裝:
conda install -c conda-forge jieba
方法三:去conda官網搜索包
說明:對於那些無法通過conda安裝或者從Anaconda.org獲得的包,我們通常可以用pip來安裝包。
pip只是一個包管理器,所以它不能為你管理環境。pip甚至不能升級python,因為它不像conda一樣把python當做包來處理。但是它可以安裝一些conda安裝不了的包,pip和conda都集成在Anaconda或miniconda裡邊。
另外你還可以去 官網 搜索://anaconda.org/
如下,找到很多渠道:
找到安裝路徑:
再使用該安裝路徑安裝即可:
conda install -c conda-forge jieba
方法四:去pypi下載安裝包,手動安裝
如果下載太慢,可以去官網下載,下載jieba的安裝包,然後解壓到pkgs目錄上,參考鏈接://www.pianshen.com/article/18251601207/
官網鏈接://pypi.org/project/jieba/#files
解壓之後,執行包里的setup.py文件也可以安裝成功。
wget //files.pythonhosted.org/packages/c6/cb/18eeb235f833b726522d7ebed54f2278ce28ba9438e3135ab0278d9792a2/jieba-0.42.1.tar.gz tar xf jieba-0.42.1.tar.gz mv jieba-0.42.1 /root/anaconda3/pkgs/ cd /root/anaconda3/pkgs/jieba-0.42.1/ # 如果要安裝到指定虛擬環境中,需要先激活環境,再執行install source activate job_recommended python setup.py install
如果安裝的時候,沒有進入虛擬環境,可以在安裝後,重新激活虛擬環境,再安裝一次,安裝到虛擬環境中,如下,
9、Miniconda
Miniconda 是一個 Anaconda 的輕量級替代,默認只包含了 python 和 conda,但是可以通過 pip 和 conda 來安裝所需要的包。
Miniconda相比Anaconda,去掉了科學計算的相關包,更加輕量級,沒有那麼臃腫。可以認為是Anaconda的最小化版本,用法與Anaconda完全一致。
Miniconda 安裝包可以到 //mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 下載。
10、圖形界面管理
Anaconda還提供了UI界面,進行圖形化管理。
比如在windows中,安裝完成後,點擊Anaconda Navigator
如圖所示:首頁顯示的是一些自帶的工具
點擊Environments,可以在這裡進行環境管理的操作。
包括:創建虛擬環境,導入虛擬環境,進入虛擬環境,以及查看安裝包
創建虛擬環境myvenv
搜索包安裝:
點擊channels可以添加渠道
11、Jupyter Notebook
Anaconda自帶了Jupyter Notebook,我們可以直接啟動Jupyter Notebook。
window啟動:
Linux啟動:
如果沒有安裝Anaconda,就需要手動安裝一下jupyter notebook
pip install jupyter notebook
因為Anaconda自帶了jupyter,所以直接啟動:
jupyter notebook --allow-root
注意,默認是不允許外部訪問的,需要配置一下遠程訪問支持:
生成jupyter配置文件
#root用戶: jupyter notebook --generate-config --allow-root #非root用戶 jupyter notebook --generate-config
如下圖:
修改配置
vim /root/.jupyter/jupyter_notebook_config.py
增加以下兩行:
c.NotebookApp.ip = '*' c.NotebookApp.open_browser = False
配置密碼:
jupyter notebook password
這裡密碼輸入123456
啟動jupyter notebook:
jupyter notebook --allow-root
如下圖所示:
也可以後台啟動:
nohup jupyter notebook --allow-root > jupyter.log 2>&1 &
打開網頁訪問:默認8888端口
輸入地址:(配置好hosts映射)//linux121:8888/
輸入密碼123456
登錄如下圖:
裏面的文件,就是我們之前啟動jupyter notebook的當前目錄下的內容
新建一個文件:
輸入python代碼,點擊run運行如下:
import time, sys for i in range(8): print(i) time.sleep(0.5)
如下圖所示:
更多jupyter notebook,參考://jupyter-notebook.readthedocs.io/en/latest/
12、優缺點分析:
1、功能強大,而且還有UI界面。
2、支持python2、python3以及windows、linux、mac等多平台。
3、conda安裝可以自動解決依賴關係,之前的pip可能不會安裝所有依賴包,導致出現依賴問題。
4、Anaconda,顯得有點厚重,臃腫,但是可以用輕量級的miniconda替換。
5、conda安裝軟件需要解析依賴關係,而且默認連的國外的鏡像源,所以conda安裝可能很慢。
6、包含大量的科學計算的包,適合做數據分析或者喜歡UI界面的人。
參考引用:
//www.cnblogs.com/rexcheny/p/9484309.html
//zhuanlan.zhihu.com/p/106588887