本文介紹Linux系統安裝Anaconda,用於跑Pyhton程式的方法。
1. 使用Anaconda的理由#
Linux系統執行和開發Python程式,明明已經有pip管理套件,virtualenv管理虛擬環境,有什麼理由使用Anaconda呢?
根據官網描述,Anaconda是一個Python以及R語言的發行版,內建大量資料科學分析工具。
可是若我不是做這個的,要Anaconda幹嘛?我想,Anaconda最大的優點是在簡化軟體部署的同時,解決了三個問題:1. 方便在一台電腦安裝多版本Python 2. 方便管理虛擬環境的設定 3. 方便遷移Python環境
首先考慮問題一,Pyhton多重版本共存的問題。例如Debian預設Python版本是3.9,Arch Linux預設Python是3.10。假設因應某軟體需求,現在要讓二部電腦建立一樣的Python 3.6環境,首要任務便是安裝一樣的Python版本了吧?Arch Linux可能有 AUR舊版本的Python套件,一行指令直接裝;而Debian就得去找野生PPA,或是從Python官網下載原始碼編譯了。
於是,Anaconda解決了Linux系統多重Pyhton版本共存的問題,在安裝Anaconda後,要下載舊版Python也是一行指令裝好,從Python 2.7到Python 3.11都有。至於如何在執行時切換Python版本,這就要用到第二點的「虛擬環境」了。
再來考慮問題二,Python虛擬環境的問題。有時候我會從Github抓一些Python專案研究,可能就要用pip裝依賴套件。但是若我同時又在寫另外一個Pyhton程式,用到的套件衝突呢?別說不可能,opencv-python
與opencv-python-headless
只有其中一個能運作的狀況遇過不只一次。通常為避免這種情況,都是建議用Python virtualenv建立虛擬環境避開吧,讓套件不會互相污染。而Anaconda也有這個功能,並且簡化了操作:透過Anaconda安裝各版本的Python,並建立虛擬環境,然後切換進去,還同時提供conda和pip這二種十分類似的套件管理器。在沒有Anaconda前這樣的操作需要額外設定Python路徑,指令很醜;而Anaconda將這個操作簡化至一行指令,方便進入Python開發環境。
問題三,Anaconda的檔案可以安裝在任意目錄,未來如果要換系統,只要在安裝Anaconda的時候指向之前的路徑就行了,依賴套件會全部保存下來,不需全部重裝。
2. 安裝前置依賴套件#
根據 官網所述,按照Linux發行版安裝Anaconda的前置依賴套件,非root帳號記得加sudo。
Debian/Ubuntu | apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6 |
RHEL/Fedora/CentOS | dnf install libXcomposite libXcursor libXi libXtst libXrandr alsa-lib mesa-libEGL libXdamage mesa-libGL libXScrnSaver |
Arch Linux/Manjaro | pacman -S libxau libxi libxss libxtst libxcursor libxcomposite libxdamage libxfixes libxrandr libxrender mesa-libgl alsa-lib libglvnd |
openSUSE/SLES | zypper install libXcomposite1 libXi6 libXext6 libXau6 libX11-6 libXrandr2 libXrender1 libXss1 libXtst6 libXdamage1 libXcursor1 libxcb1 libasound2 libX11-xcb1 Mesa-libGL1 Mesa-libEGL1 |
Gentoo | emerge x11-libs/libXau x11-libs/libxcb x11-libs/libX11 x11-libs/libXext x11-libs/libXfixes x11-libs/libXrender x11-libs/libXi x11-libs/libXcomposite x11-libs/libXrandr x11-libs/libXcursor x11-libs/libXdamage x11-libs/libXScrnSaver x11-libs/libXtst media-libs/alsa-lib media-libs/mesa |
3. 安裝Anaconda#
官網提供的Anaconda安裝指令稿支援的架構為x86/x86_64/armv7l裝置。aarch64(arm64)裝置請改用 miniforge。
在安裝好依賴套件後,從 Anaconda官網下載安裝指令稿,撰文時的版本為2023-09。
下載後會得到一個shell指令稿,於下載的目錄開啟終端機。
開始安裝。Anaconda因為預設是安裝到個別使用者的目錄,所以不需要sudo。
bash Anaconda3-*-Linux-x86_64.sh
按Enter繼續
按上下鍵捲動,看完授權條款後按下q,輸入yes繼續安裝。
按Enter,等待安裝完成。conda會安裝至使用者家目錄(
~/anaconda3
)。接著會問要不要初始化Anaconda環境,輸入yes。
安裝完成後,重開終端機,之後終端機提示符會變成
(base)
,代表已進入conda環境。欲退出則輸入conda deactivate
退出conda環境。
把Linux當主力系統用的人建議輸入以下指令停用自動進入conda,否則每次開啟終端機都會頓一下並自動進入conda環境,很煩。
conda config --set auto_activate_base false
4. 如何使用conda指令#
使用conda info
檢查目前的Anaconda安裝狀態。
使用python --version
查看目前Linux系統的Python版本,像這裡是3.10.9。之後進入虛擬環境後我們再來看看有何不同。
Anaconda提供的conda究竟有什麼用呢?讓我們來看看基本用法。
- conda的主要功能:建立隔離的Python環境。例如現在要建立一個叫做
opencv
,Python版本為3.6的虛擬環境,輸入以下指令:
conda create --name opencv python=3.6
Conda會開始下載套件,輸入y同意。
輸入
conda activate opencv
進入名為opencv的虛擬環境,我們可以看到終端機提示符變成了(opencv)
。此時我們可以查看一下Python版本:
python --version
,輸出為3.6.13,代表目前使用的Python為conda安裝的Python 3.6.13,而非Linux系統安裝的Python 3.10.9。接著就可以用
conda install
或pip install
安裝套件了,二者效果是一樣的,也不用擔心會污染Linux系統的Python環境。虛擬環境安裝的套件僅在虛擬環境內才能執行,離開虛擬環境後便無法使用。輸入
conda deactivate
退出目前的虛擬環境。輸入
conda info --envs
查看目前已建立的虛擬環境,可以看到有安裝Anaconda時一併建立的base
,還有上面建立的opencv
環境。如果要進入特定虛擬環境,輸入conda activate <虛擬環境名稱>
就行了。欲刪除建立的虛擬環境,輸入以下指令,便會將名為
opencv
環境以及安裝的套件刪除:
conda env remove --name opencv
如果想在bash shell script自動啟動conda環境,那麼可以填入此指令:
eval "$(conda shell.bash hook)"
conda activate "環境名稱"
其餘conda指令的使用方式,請參考 官方說明文件。