【pyenv徹底解說】從 Python 版本管理到虛擬環境的完整指南

1. 什麼是 pyenv?

對於 Python 開發者來說,不同的專案可能需要不同版本的 Python。在這種情況下,pyenv 就是一個非常有用的工具。pyenv 是一款管理多個 Python 版本的工具,它可以讓您在不同的專案之間輕鬆切換 Python 版本。

Python 版本管理的挑戰

在 Python 開發過程中,可能會遇到不同專案需要不同 Python 版本的情況。例如,某個專案可能需要使用 Python 3.9,而另一個專案則可能需要 Python 2.7。然而,系統通常只允許安裝一個 Python 版本,這導致版本切換變得相當麻煩。pyenv 則可以解決這個問題。

pyenv 的優勢

使用 pyenv 可以獲得以下好處:

  1. 簡單的版本切換:使用 pyenv,您可以輕鬆在全系統或特定專案中切換 Python 版本。
  2. 管理多個 Python 版本:可以使用單一指令管理系統內安裝的多個 Python 版本,讓專案之間的相依性和版本差異變得更容易處理。
  3. 支援多種作業系統(Windows 除外):可在 macOS 和 Linux 等作業系統上使用。

pyenv 的運作方式

pyenv 會為不同的 Python 版本建立專屬目錄,並將每個版本安裝到這些目錄內。使用者可以透過 pyenv globalpyenv local 指令來指定全系統或特定專案要使用的 Python 版本。

2. 如何安裝 pyenv

概覽

若要使用 pyenv,首先需要在系統上安裝它。本節將介紹如何在 macOS 和 Linux 環境中安裝 pyenv。由於 pyenv 不支援 Windows,因此建議使用其他方法(如 WSL 或 Anaconda)。

在 macOS 上安裝 pyenv

在 macOS 上,可以透過 Homebrew 來安裝 pyenvHomebrew 是 macOS 的套件管理工具,可以讓您輕鬆安裝各種軟體。請按照以下步驟進行安裝:

  1. 確認是否已安裝 Homebrew
    首先,請確認您的系統上是否已安裝 Homebrew,打開終端機並執行以下指令:
   brew --version

如果出現 Homebrew 的版本資訊,表示已安裝。如果尚未安裝,請前往官方網站(Homebrew 官方網站)查看安裝步驟。

  1. 安裝 pyenv
    如果您的系統已安裝 Homebrew,請執行以下指令來安裝 pyenv
   brew install pyenv

安裝完成後,請繼續進行下一個步驟。

  1. 設定環境變數
    為了讓 pyenv 正常運作,需要設定 shell 環境變數。通常需要在 .bash_profile.zshrc 檔案中新增設定。請執行以下指令:
   echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
   echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
   echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile

如果使用的是 .zshrc,請將以上指令中的 .bash_profile 改為 .zshrc。設定完成後,請重新啟動終端機,或執行以下指令以使設定立即生效:

   source ~/.bash_profile
  1. 確認安裝是否成功
    請執行以下指令,確認 pyenv 是否正確安裝:
   pyenv --version

如果顯示 pyenv 的版本號,表示安裝成功。

在 Linux 上安裝 pyenv

在 Linux 上,安裝方式與 macOS 類似,但通常使用 aptyum 來安裝相關的相依套件。以下是 Ubuntu 上的安裝步驟:

  1. 安裝必要的相依套件
    在安裝 pyenv 之前,請先安裝所需的依賴套件。執行以下指令:
   sudo apt update
   sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev 
   libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev 
   xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
  1. 安裝 pyenv
    使用 Git 下載 pyenv 並進行安裝:
   curl https://pyenv.run | bash
  1. 設定環境變數
    為了讓 pyenv 正常運作,請在 .bashrc.zshrc 中新增以下設定:
   export PATH="$HOME/.pyenv/bin:$PATH"
   eval "$(pyenv init --path)"

要使設定生效,請重新啟動終端機,或執行 source ~/.bashrc

  1. 確認安裝
    執行以下指令,確認 pyenv 是否正確安裝:
   pyenv --version

3. 管理 Python 版本

安裝 pyenv 之後,下一步就是學習如何使用它來管理 Python 版本。本節將介紹如何使用 pyenv 來安裝和切換不同版本的 Python。

安裝 Python 版本

透過 pyenv,可以輕鬆安裝不同版本的 Python。例如,某個專案需要使用 Python 3.8,而另一個專案則需要 Python 3.9,您可以使用以下步驟來安裝所需的版本。

  1. 查看可用的 Python 版本
    首先,使用以下指令查看 pyenv 可用的 Python 版本清單:
   pyenv install --list

這將列出所有可安裝的 Python 版本,您可以根據需求選擇適合的版本。

  1. 安裝指定的 Python 版本
    要安裝特定版本的 Python,請執行以下指令:
   pyenv install 3.9.1

此指令將在系統內安裝 Python 3.9.1。如果需要多個版本,可以分別執行對應的安裝指令。

切換 Python 版本

使用 pyenv,可以方便地在不同的 Python 版本之間切換,確保每個專案使用適合的版本,避免相依性衝突。

  1. 切換全系統的 Python 版本
    若要更改系統內預設使用的 Python 版本,可以執行:
   pyenv global 3.9.1

這將設定 Python 3.9.1 為全系統預設版本,所有目錄都會使用該版本。

  1. 針對特定專案切換 Python 版本
    若僅希望某個專案使用特定的 Python 版本,可以在該專案目錄內執行:
   pyenv local 3.8.0

此指令會在當前目錄內設定 Python 3.8.0,其他目錄仍然使用 pyenv global 設定的版本。

  1. 確認當前使用的 Python 版本
    若要確認目前系統或專案目錄內的 Python 版本,可以執行以下指令:
   pyenv version

此指令將顯示當前正在使用的 Python 版本。

移除 Python 版本

如果不再需要某個 Python 版本,可以使用以下指令將其刪除:

   pyenv uninstall 3.9.1

這將移除 Python 3.9.1 版本。

4. 搭配 virtualenv 使用

pyenv 能有效管理 Python 版本,但在開發 Python 專案時,還需要管理相依套件。為此,可以搭配 virtualenv(虛擬環境)來使用,以確保專案間的相依性互不影響。本節將說明如何結合 pyenvvirtualenv,並解釋其優勢。

什麼是 virtualenv?

virtualenv 是一款用於建立獨立 Python 環境的工具,能夠讓每個專案擁有自己的套件與相依性,而不影響系統的全域環境。例如,專案 A 需要 requests 2.0 版,而專案 B 則需要 3.0 版,這時可以為各自的專案建立獨立的虛擬環境,避免套件版本衝突。

pyenv 與 virtualenv 的區別

pyenv 主要負責 Python 版本管理,可讓您在系統內安裝多個 Python 版本,並為不同專案指定不同的版本。而 virtualenv 則用來 管理專案的套件相依性,確保專案內的 Python 環境不會相互干擾。

結合使用 pyenvvirtualenv 可以獲得以下優勢:

  • 管理多個 Python 版本:透過 pyenv 安裝並切換不同版本的 Python。
  • 專案間的相依性分離:使用 virtualenv,讓每個專案擁有獨立的 Python 環境,避免相依性衝突。

安裝 pyenv-virtualenv

除了 pyenv 之外,還可以安裝 pyenv-virtualenv 插件,以更方便地管理虛擬環境。以下是安裝步驟:

  1. 安裝 pyenv-virtualenv
    若使用 macOS,可以透過 Homebrew 安裝:
   brew install pyenv-virtualenv

若使用 Linux,則可以透過 Git 安裝:

   git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
  1. 設定環境變數
    安裝完成後,請在 .bash_profile.zshrc 中加入以下設定,並重新載入設定檔:
   echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
   source ~/.bash_profile

建立虛擬環境

使用 pyenv-virtualenv 可以根據特定 Python 版本建立獨立的虛擬環境。例如,建立 Python 3.8.0 的虛擬環境:

   pyenv virtualenv 3.8.0 my_project_env

這將建立名為 my_project_env 的虛擬環境。

切換虛擬環境

要使用剛剛建立的虛擬環境,可以執行以下指令:

   pyenv local my_project_env

此指令會讓當前目錄自動使用 my_project_env 這個虛擬環境。離開該目錄後,Python 版本將恢復為全域設定的版本。

刪除虛擬環境

如果不再需要某個虛擬環境,可以執行以下指令來刪除它:

   pyenv uninstall my_project_env

virtualenv 的優勢

結合 pyenvvirtualenv,可以完全分離不同專案的 Python 環境,降低相依性衝突的風險,確保開發環境的穩定性。

5. 使用 pyenv 時的注意事項

pyenvvirtualenv 讓 Python 版本管理變得更容易,但在使用時仍需注意某些問題,以下將列出常見錯誤與解決方案。

1. Windows 支援有限

pyenv 主要支援 macOS 和 Linux,Windows 並未被官方支援。若想在 Windows 上使用 pyenv,可以考慮以下方法:

  • 使用 Windows Subsystem for Linux (WSL):透過 WSL 安裝 Linux 環境,然後在 WSL 內安裝 pyenv
  • 使用 Anaconda:Anaconda 也是一種管理 Python 環境的方法,適合 Windows 用戶使用。

2. 依賴套件不足導致錯誤

在 Linux 上安裝 pyenv 時,如果出現錯誤訊息,通常是因為缺少必要的系統套件。例如:

WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?

解決方案

  • 安裝缺少的系統套件,例如 libbz2-devlibssl-dev,然後重新執行 pyenv install
   sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev

3. 舊版 Python 與 pyenv 衝突

若系統內已有舊版 Python,可能會與 pyenv 管理的 Python 產生衝突。

解決方案

  • 確保您的 .bashrc.zshrc 設定中包含以下內容:
   export PATH="$HOME/.pyenv/bin:$PATH"
   eval "$(pyenv init --path)"
  • 重新啟動終端機,或執行 source ~/.bashrc 讓設定生效。

4. 指定 Python 版本錯誤

若在執行 pyenv install 時發生錯誤,請先確認版本號是否正確。

解決方案

  • 執行 pyenv install --list 查看可用版本,並確保輸入的版本號正確。

5. 虛擬環境相依性衝突

當多個虛擬環境共用相同的 Python 版本時,可能會發生相依性衝突。

解決方案

  • 每個專案應該建立獨立的虛擬環境,避免不同專案的相依性互相影響。

6. 總結與下一步

pyenv 是 Python 版本管理的強大工具,特別適合需要在多個專案中使用不同版本的 Python 開發者。透過 pyenv,您可以輕鬆切換 Python 版本,並搭配 virtualenv 來管理專案的相依性。

pyenv 的核心優勢

  1. 簡化 Python 版本管理:可快速安裝與切換不同 Python 版本。
  2. 虛擬環境隔離:使用 pyenv-virtualenvvirtualenv,讓每個專案擁有獨立的環境。
  3. 解決相依性問題:防止不同專案的 Python 環境相互干擾。

下一步建議

  1. 進一步學習 Python 環境管理:除了 pyenv 之外,還可以學習 pipenvpoetry 來簡化依賴管理。
  2. 測試 pyenv:在您的專案中嘗試使用 pyenv,看看如何有效管理 Python 版本。
  3. 適用於不同作業系統:若您使用的是 Windows,可考慮使用 WSL 或 Anaconda。
オープンソースの力を活用する方法~Ubuntuの世界へようこそ~

目次 1 1. はじめに1.1 Pythonバージョン管理の重要性1.2 Ubuntuとpyenvの組み合わせの利点2 …