緣由
初始學習Python便是以資料工程的領域入門,Anaconda提供不少資料科學與分析所需的套件,且預設安裝Jupyter notebook,基於傻瓜部署,一路使用至今。因如下介紹的conda的部署缺點,一直有考慮其他Python開發環境部署方式。
眾所皆知,Apple在2021推出自製ARM M1晶片,本篇操作載入ARM架構下的image,Ubuntu 20.04.5 LTS。
以pyenv + virtualenv紀錄部署上的重點。
Python開發環境部署
- Anaconda
- 優點:傻瓜部署,只需按照官方說明安裝,安裝完後依照專案設定python版本與env,即可快速使用
- 缺點:
- 因預設載好各種資料科學套件包,從下載到安裝完成需30分鐘以上
- 可使用conda與pip安裝套件,當環境需要轉移,整理requirement.txt耗時
- 當有封裝程式需求時,因有非常多套件一起封裝,最終封裝完的程式檔案可能佔用太多空間
- Miniconda
因肥大的資料科學套件引人詬病,miniconda是anaconda的精簡版,只有環境控制的相關功能,沒有多餘的library
- 優點:免預先安裝多餘library,可繼續使用conda管理python env
- 缺點:與Anaconda相同,當環境需要轉移,整理requirement.txt耗時
- pyenv
優點:
- 與Miniconda類似,極輕量
- 僅用pip進行管理
缺點:僅有python版本管理,env管理需搭配pyenv-virtualenv
主機環境
- 操作系统: Ubuntu 20.04.5 LTS (Focal Fossa)
- 内核版本: 5.15.0-48-generic
安裝pyenv
安裝參考pyenv 官方 GitHub
從GitHub載入pyenv
1
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
在 ~/.bashrc 添加以下字段
1
2
3echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc在 ~/.profile 添加以下字段
1
2
3echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init -)"' >> ~/.profile重啟shell,使環境變數生效
1
exec "$SHELL"
查閱pyenv下所有Python版本,檢查是否安裝成功
1
pyenv versions
輸出如下說明即代表安裝成功
1
* system (set by /home/username/.pyenv/version)
使用 pyenv install 安裝 Python
列出所有可安裝的Python版本
1
pyenv install --list
安裝Python 3.6.5
1
pyenv install 3.6.5
- 執行後出現訊息
1
2
3
4Downloading Python-3.6.5.tar.xz...
-> https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
Installing Python-3.6.5...
Installed Python-3.6.5 to /home/dawn/.pyenv/versions/3.6.5
- 等待安裝完成後,重新查看pyenv版本輸出如下,可切換環境使用。
PS: 僅一種版本對應一個環境,並不夠便捷,因此安裝pyenv-virtualenv可以更方便協助管理環境。1
2* system (set by /home/dawn/.pyenv/version)
3.6.5
安裝pyenv-virtualenv
依據官網說明,pyenv-virtualenv為Pyenv的外掛套件,可以管理Python的虛擬環境
從GitHub載入pyenv-virtualenv
1
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
在 ~/.bashrc 添加以下字段
1
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
重啟shell,使環境變數生效
1
exec "$SHELL"
創建虛擬環境,環境名稱myenv
PS:需要注意要先以pyenv建立3.6.5的python版本,才有辦法創建該版本的env,若無指定版本,則以系統預設版本為主1
pyenv virtualenv 3.6.5 myenv
切換環境
- global
1
2pyenv global myenv # 設定系統預設的python環境為myenv
pyenv global 3.6.5 # 設定系統預設python版本
- 查閱系統當下版本,以系統設定python版本為例,輸出如下
1
2
3
4system
* 3.6.5 (set by /home/dawn/.pyenv/version) # *為系統預設版本
3.6.5/envs/myenv
myenv
- local
可在所屬專案目錄下,指定專案Python版本,該目錄會出現.python-version 檔案,隨後即可以pip安裝package1
pyenv local myenv
啟動、退出、移除環境
啟動環境
1
pyenv activate myenv
退出環境
1
pyenv deactivate
移除環境
1
pyenv uninstall myenv
感想
從參考文章告別 Anaconda:在 macOS 上使用 pyenv 建立 Python 開發環境 看到註解
「不同 Python 版本間的虛擬環境管理」和「不同專案間的虛擬環境管理」基本上是兩件事,只不過 Anaconda 透過 conda 同時都能做到而已。
實際以pyenv + virtualenv操作後更能瞭解該說明,是以往僅使用conda來管理環境時沒有思考過的事。
評論