在 Ubuntu 安裝使用 pyenv + pyenv-virtualenv
之前有寫過 在 macOS 上安裝與使用 Python 版本隔離與虛擬環境管理的利器 — pyenv + pyenv-virtualenv。
事實上,它更常被使用的場景應該是在 Linux,畢竟無論是 Windows 或 macOS 都有功能相仿但更無腦、容易上手的選擇的 conda env。
conda 具有 GUI 界面的優勢,所以懶得打指令的我也用了好長一段時間。
而只要是開發者,無論是自己租的 VPS 還是公司用來測試的環境,相信十之八九都是安裝了 Ubuntu 或別的發行版的 Linux 執行個體。
因此,學會在 Ubuntu 上使用 pyenv 也很值得,和 macOS 的差別不大,只是要額外安裝一些依賴,以及沒有 brew install
這個選項而已。
為了確保內容的正確與可行,在寫這篇文章的同時,我也在自己的 GCP 新建一個 f1-micro VM 進行 pyenv 安裝,選擇的作業系統版本為 Ubuntu 20.04.1。
安裝 pyenv
安裝前請再看一下 pyenv 的 GitHub 頁面,大部分的流程都已經寫在這裡,也可參考我之前的 文章 。
基本上照本篇一步一步執行應該都可以成功。
先安裝 dependency package
第一步,也是主要的差異,就是要先安裝相關依賴:
sudo apt-get update; sudo apt-get install -y --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
注意這些套件名稱也會隨著不同的 Linux 發行版而有差別,CentOS 的用戶需要另外 google。然後就是有點費時。
從 GitHub 安裝 pyenv
因為不是 Mac 沒有 homebrew,只能以 git clone
安裝:
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
設定 .bashrc 與 .profile
這部分很重要且容易出錯。
主要看你用哪個 shell,而 Ubuntu 自帶的就是 bash,故先以 bash 為例。最簡單暴力的方法就是直接複製並執行下面這兩段 script:(官方文件就有)
第一段
echo -e 'if shopt -q login_shell; then' \ '\n export PYENV_ROOT="$HOME/.pyenv"' \ '\n export PATH="$PYENV_ROOT/bin:$PATH"' \ '\n eval "$(pyenv init --path)"' \ '\nfi' >> ~/.bashrc echo -e 'if [ -z "$BASH_VERSION" ]; then'\ '\n export PYENV_ROOT="$HOME/.pyenv"'\ '\n export PATH="$PYENV_ROOT/bin:$PATH"'\ '\n eval "$(pyenv init --path)"'\ '\nfi' >>~/.profile
第二段
echo 'if command -v pyenv >/dev/null; then eval "$(pyenv init -)"; fi' >> ~/.bashrc
完成!
安裝 pyenv-virtualenv
非必要步驟,可以選擇自己喜好的虛擬環境管理工具,但個人還是推薦 pyenv-virtualenv。
從 GitHub 安裝 pyenv-virtualenv
一樣先參考 官方文件 。
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
注意,請務必確保 已經正確安裝 pyenv 尤其是設定好.bashrc
後再來執行此步,以免發生路徑錯誤。
設定 .bashrc
一樣,複製貼上執行即可:
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
最後,別忘了
重登或 source ~/.bashrc
或 exec "$SHELL"
簡易設定與使用
幾個小目標:
- 安裝 Python 3.8.12
- 將 3.8.12 設為系統預設的 Python 版本
- 以 3.8.12 建立虛擬環境
- 啟動虛擬環境
- 退出虛擬環境
一、安裝 Python 3.8.12
pyenv install 3.8.12
執行後的訊息為:
Downloading Python-3.8.12.tar.xz... -> https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tar.xz Installing Python-3.8.12...
特別提醒:如果 VM 的規格很差,比如本篇中的 f1-micro,則安裝會非常耗時,會停在上述訊息很長一段時間,可能超過 20 分鐘,並不是當機了。
具體的原因如本 討論串 回覆所述:
Please try with larger instance types during pyenv install. Because the pyenv install will build CPython from source, it consumes bunch of memory and CPU cycles.
這段論述應該無誤,同一 Python 版本我用本機安裝時速度快很多。而 f1-micro 大概耗費了 25 分鐘,非常久,且期間 CPU 都是 100% 負載運作。
至於要查看有哪些版本可供安裝,可使用指令 pyenv install --list
或 pyenv install -l
查詢。
二、將 3.8.12 設為系統預設的 Python 版本
pyenv global 3.8.12
三、以 3.8.12 建立虛擬環境
pyenv virtualenv 3.8.12 luffy
在此命名虛擬環境為:luffy。
四、啟動虛擬環境 luffy
pyenv activate luffy
此時就可以 pip
安裝你需要的套件了。
五、退出虛擬環境
pyenv deactivate luffy
Originally published at Code and Me on September 8, 2021.