天天看點

Python開發環境主流開發工具選擇

Python的開發環境

在 Python 開發環境中我們能看到很多工具,如

pip

conda

poetry

virtualenv

venv

pyenv

等等。他們是什麼,都有什麼作用,該怎麼選擇,如何建構一個開發環境,在這篇文章我會盡力全面的闡明,既然全面那麼很多細節就無法照顧,感興趣可以在參考資料中進一步了解。本文将人群分為兩類,一類是持保持最新政策的人,希望個人 PC 裡所有軟體工具都保持最新,想體驗最新特性,最新優化等;另一類是持保持穩定政策的人,比如部署在生産環境,不會經常變更版本,防止出現未知依賴問題等。對于這兩類人群提供不同的建議。

在 Python 開發環境中最常見任務是 Python 版本管理、虛拟環境、包管理、打包釋出、安裝。

各工具提供功能概覽:

  • venv

    :提供虛拟環境。
  • virtualenv

  • pyenv

    :Python 版本管理。
  • conda

    :提供 Python 版本、虛拟環境、包管理、打包釋出(conda)、安裝。
  • poetry

    :虛拟環境相關、包管理、打包釋出(标準)、安裝。
  • pip

    :包管理、打包釋出(标準)、安裝。

若還有其他相關工具,歡迎在評論區推薦。

虛拟環境

虛拟環境包含一份獨立的 Python 環境,含獨立解釋器與庫集合(

site-packages

)。

conda

poetry

virtualenv

venv

pyenv

都有虛拟環境相關的設定。

  • venv

    是 Python 标準庫支援的虛拟環境建立庫。
    • 缺點
      • venv

        在 Python 3.5 後推薦使用。
      • 隻能建立與主環境 Python 版本一緻的虛拟環境。
    • 優點:無需額外下載下傳。
    • 使用:指令行使用簡單,功能簡單,無法滿足複雜需求,但可通過其提供的 API 來編寫完成複雜需求。面向第三方虛拟環境建立者。
  • virtualenv

    是 Python 第三方庫,可以建立獨立的虛拟環境。
    • 優點
      • 支援 Python2 和 Python3。
      • 可以為虛拟環境指定本地已有的 Python 版本。
      • 不支援 Python 版本下載下傳。
      • 依賴 Python。
  • pyenv

    是一個第三方工具,可以下載下傳并管理多個 Python 版本。支援全局切換、單項目 Python 版本指定等特性。
      • 不支援虛拟環境管理,需通過

        virtualenv

        pyenv-virtualenv

        來增強其功能。後者還提供管理

        conda

        環境功能。
      • 安裝複雜。Windows 使用者使用請使用

        pyenv-win

        。Linux/Mac 使用者使用

        pyenv

    • 優點:不依賴 Python。
  • conda

    支援下載下傳建立不同版本 Python 虛拟環境。
      • 無法擷取最新 Python 版本。
      • 安裝複雜。
      • 無法與其他工具保持相容性。往往需要其他工具來提供對

        conda

        的相容性。
      • 使用友善
      • 基本囊括開發環境所需的所有功能。推薦新手與持保持穩定決策的使用者使用。
  • poetry

    并不提供虛拟環境管理相關功能,隻使用虛拟環境。可以使用将虛拟環境放置項目内的方式來建立虛拟環境。

    poetry

    定位是在單項目全面管理,是以與其他工具不太一樣。

虛拟環境管理工具推薦

  • 對于持保持最新政策,推薦

    pyenv

    +

    poetry

    。(如果隻想要虛拟環境管理可以用

    pyenv

    pyenv-virtualenv

    )
  • 對于持保持穩定政策,推薦

    conda

    。(同樣推薦

    poetry

    用于單項目管理,

    conda

    用于全局管理)

pyenv

conda

如果想同時使用,需要再安裝

pyenv-virtualenv

包管理器

pip、conda、poetry

待更新

打包釋出

安裝

總結

參考資料

  1. venv-Python 标準庫
  2. What is python's site-packages directory?
  3. python多環境管理(venv與virtualenv)
  4. pyenv
  5. pyenv-virtualenv
  6. 和 PyPA 的成員聊聊 Python 開發工作流-捕蛇者說