管理 Python 環境和依賴關係的工具 venv、virtualenv、pipenv 、poetry 、 miniforge 和 anaconda 的區別

weiqinl發表於2024-11-11

管理 Python 環境和依賴關係的工具 venv、virtualenv、pipenv 、poetry 、 miniforge 和 anaconda 的區別

venvvirtualenvpipenvPoetryMiniforgeAnaconda 都是用於管理 Python 環境和依賴關係的工具,但它們在功能和使用場景上有一些顯著的區別。以下是它們的主要區別:

venv

  1. 輕量級

    • venv 是 Python 3.3 及以上版本標準庫的一部分,專門用於建立 Python 虛擬環境。
    • 它非常輕量,只提供基本的虛擬環境管理功能。
  2. 環境管理

    • venv 可以建立獨立的 Python 虛擬環境,每個環境有自己的一套 Python 直譯器和包。
    • 使用 venv 建立的環境通常較小,因為它們只包含必要的 Python 包。
  3. 包管理

    • venv 本身不提供包管理功能,通常與 pip 結合使用來安裝和管理 Python 包。
    • 需要手動管理 requirements.txt 檔案來記錄專案的依賴關係。
  4. 使用場景

    • 適用於簡單的 Python 專案,特別是那些只需要管理 Python 包和虛擬環境的專案。
    • 適用於對環境管理要求不高的開發場景。
  5. 使用示例

    • 在命令列中,使用 python3 -m venv myenv 建立一個名為 myenv 的虛擬環境。

      python3 -m venv myenv      # 建立虛擬環境
      source myenv/bin/activate  # 啟用環境 Linux/macOS
      myenv\Scripts\activate     # 啟用環境 Windows
      pip install requests       # 安裝包
      

virtualenv

  1. 獨立工具

    • virtualenv 是一個獨立的第三方工具,用於建立 Python 虛擬環境。
    • 它比 venv 更早出現,功能也更豐富一些。適用於 Python 2 和 Python 3。
  2. 環境管理

    • virtualenv 可以建立獨立的 Python 虛擬環境,每個環境有自己的一套 Python 直譯器和包。
    • 提供了一些高階選項,如指定 Python 直譯器版本、複製系統站點包等。
  3. 包管理

    • virtualenv 本身不提供包管理功能,通常與 pip 結合使用來安裝和管理 Python 包。
    • 需要手動管理 requirements.txt 檔案來記錄專案的依賴關係。
  4. 使用場景

    • 適用於需要更多自定義選項的 Python 專案。
    • 適用於需要相容早期 Python 版本的專案。
  5. 使用示例

    • 安裝並建立虛擬環境:

      pip install virtualenv     # 安裝 virtualenv
      virtualenv myenv           # 建立虛擬環境
      source myenv/bin/activate  # 啟用環境 Linux/macOS
      myenv\Scripts\activate     # 啟用環境 Windows
      pip install requests       # 安裝包
      

pipenv

  1. 整合工具

    • pipenv 是一個整合了 virtualenvpip 的工具,用於管理虛擬環境和依賴關係。
    • 它使用 PipfilePipfile.lock 檔案來管理專案的依賴關係。
  2. 環境管理

    • pipenv 會自動為每個專案建立和管理一個獨立的虛擬環境,避免不同專案之間的依賴衝突。
    • 可以輕鬆地啟用和停用虛擬環境。
  3. 包管理

    • pipenv 自動處理依賴關係的解析和安裝,確保專案的所有依賴都能正確安裝。
    • 生成和管理 Pipfile.lock 檔案,確保在不同環境中安裝相同的依賴版本,支援語義化版本管理。
  4. 使用場景

    • 適用於需要管理虛擬環境和依賴關係的中等複雜度的 Python 專案。
    • 適用於需要自動處理依賴關係解析和安裝的專案。
  5. 使用示例

    • 需要單獨安裝 pipenv,通常透過 pip 安裝:

      pip install pipenv    # 安裝 pipenv
      pipenv install requests # 安裝包
      pipenv shell  # 啟用虛擬環境
      

Poetry

  1. 多功能

    • Poetry 是一個現代的 Python 包管理和環境管理工具,不僅管理虛擬環境,還管理專案的依賴關係。
    • 它使用 pyproject.toml 檔案來管理專案的依賴關係,這個檔案是 PEP 518 推薦的標準配置檔案。
  2. 環境管理

    • Poetry 會自動為每個專案建立和管理一個獨立的虛擬環境,避免不同專案之間的依賴衝突。
    • 可以輕鬆地啟用和停用虛擬環境。
  3. 包管理

    • Poetry 自動處理依賴關係的解析和安裝,確保專案的所有依賴都能正確安裝。
    • 生成和管理 lock 檔案(poetry.lock),確保在不同環境中安裝相同的依賴版本。
  4. 包釋出

    • Poetry 提供了簡便的命令來打包和釋出 Python 包到 PyPI 或其他私有倉庫。
    • 自動生成 setup.pyMANIFEST.in 檔案,簡化釋出流程。
  5. 版本管理

    • Poetry 支援語義化版本管理,可以方便地管理專案的版本號。
    • 提供命令來增加版本號並生成相應的變更日誌。
  6. 使用場景

    • 適用於需要精細依賴管理和虛擬環境管理的複雜 Python 專案。
    • 適用於需要自動化和簡化包釋出流程的專案。
    • 適用於需要跨平臺支援的專案。
  7. 使用示例

    • Poetry 提供了豐富的命令列工具,可以輕鬆地管理依賴項、構建和釋出專案。
      pip install poetry
      poetry new my_project
      cd my_project
      poetry add requests
      poetry install  # 建立虛擬環境並安裝依賴
      

Miniforge

  1. Anaconda 替代品

    • Miniforge 是一個輕量級的 Anaconda 替代品,基於 Conda 包管理器。
    • 它提供了與 Anaconda 類似的功能,但體積更小,安裝更快。
    • conda-forge 社群維護。
  2. 環境管理

    • Miniforge 使用 Conda 來管理虛擬環境,可以建立獨立的環境,每個環境有自己的一套 Python 直譯器和包。
    • 提供了豐富的環境管理功能,如環境匯出和匯入。
  3. 包管理

    • Miniforge 使用 Conda 來管理包,Conda 是一個跨平臺的包管理系統,支援多種語言和工具。
    • 可以安裝來自 Anaconda 倉庫和其他自定義倉庫的包。
  4. 使用場景

    • 適用於需要管理複雜依賴關係和多語言環境的專案。
    • 適用於需要高效能運算和科學計算的專案。
    • 適用於需要跨平臺支援的專案。
  5. 使用示例

    # 安裝 Miniforge - Linux
    wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh
    bash Miniforge3-Linux-x86_64.sh
    
    # 建立環境
    conda create --name my_env python=3.13
    conda activate my_env
    
    # 安裝包
    conda install requests
    

AnaConda

  1. 綜合包管理器

    • AnaConda 是一個開源的包管理和環境管理系統,支援多種語言和工具,而不僅僅是 Python。
    • 它提供了強大的依賴解析和包管理功能。
  2. 環境管理

    • AnaConda 可以建立獨立的環境,每個環境有自己的一套 Python 直譯器和包。
    • 提供了豐富的環境管理功能,如環境匯出和匯入。
    • 使用 environment.yml 檔案來定義環境和依賴。
  3. 包管理

    • AnaConda 可以安裝來自 Anaconda 倉庫和其他自定義倉庫的包。
    • 支援二進位制包,安裝速度快,適合大型科學計算和資料科學專案。
  4. 使用場景

    • 適用於需要管理複雜依賴關係和多語言環境的專案。
    • 適用於需要高效能運算和科學計算的專案。
    • 適用於需要跨平臺支援的專案。
    • 適用於需要綜合的包管理和環境管理功能的專案。
  5. 使用示例

    # 安裝 Anaconda 或 Miniconda
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
    bash Miniconda3-latest-Linux-x86_64.sh
    
    # 建立環境
    conda create --name my_env python=3.13
    conda activate my_env
    
    # 安裝包
    conda install requests
    

總結

  • venv

    • 適用於簡單的 Python 專案。
    • 只提供基本的虛擬環境管理功能。
    • 需要手動管理依賴關係。
    • 輕量級,易於使用。
  • virtualenv

    • 適用於需要更多自定義選項的 Python 專案。
    • 提供了一些高階選項,如指定 Python 直譯器版本。
    • 需要手動管理依賴關係。
    • 適用於需要相容早期 Python 版本的專案。
  • pipenv

    • 適用於需要管理虛擬環境和依賴關係的中等複雜度的 Python 專案。
    • 自動處理依賴關係解析和安裝。
    • 提供了 PipfilePipfile.lock 檔案來管理依賴關係。
  • Poetry

    • 適用於複雜的 Python 專案。
    • 提供全面的包管理和環境管理功能。
    • 自動處理依賴關係和版本管理。
    • 提供簡便的包釋出流程。
    • 功能強大,但相對複雜一些。
  • Miniforge

    • 適用於需要管理複雜依賴關係和多語言環境的專案。
    • 適用於需要高效能運算和科學計算的專案。
    • 適用於需要跨平臺支援的專案。
    • 輕量級的 Anaconda 替代品。
  • Anaconda

    • 適用於需要管理複雜依賴關係和多語言環境的專案。
    • 適用於需要高效能運算和科學計算的專案。
    • 適用於需要跨平臺支援的專案。
    • 綜合性強,功能全面。

使用場景

  • 使用 venv

    • 簡單的 Python 專案。
    • 需要輕量級虛擬環境管理的專案。
    • 只需要管理 Python 包的專案。
  • 使用 virtualenv

    • 需要更多自定義選項的 Python 專案。
    • 需要相容早期 Python 版本的專案。
  • 使用 pipenv

    • 中等複雜度的 Python 專案。
    • 需要自動處理依賴關係解析和安裝的專案。
  • 使用 Poetry

    • 複雜的 Python 專案。
    • 需要精細依賴管理和虛擬環境管理的專案。
    • 需要自動化和簡化包釋出流程的專案。
  • 使用 Miniforge

    • 需要管理複雜依賴關係和多語言環境的專案。
    • 需要高效能運算和科學計算的專案。
    • 需要跨平臺支援的專案。
    • 希望使用輕量級的 Anaconda 替代品。
  • 使用 Anaconda

    • 需要管理複雜依賴關係和多語言環境的專案。
    • 需要高效能運算和科學計算的專案。
    • 需要跨平臺支援的專案。
    • 需要綜合的包管理和環境管理功能。

相關文章