在 Ubuntu 安裝使用 pyenv + pyenv-virtualenv

kyo
·
·
IPFS
·
by David Besh from Pexels

之前有寫過 在 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"


簡易設定與使用

幾個小目標:

  1. 安裝 Python 3.8.12
  2. 將 3.8.12 設為系統預設的 Python 版本
  3. 以 3.8.12 建立虛擬環境
  4. 啟動虛擬環境
  5. 退出虛擬環境

一、安裝 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.

CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!