在 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.
Like my work? Don't forget to support and clap, let me know that you are with me on the road of creation. Keep this enthusiasm together!