Python 虛擬環境讓不同項目在獨立的環境里運行,從而讓各項目的支持庫相互獨立,避免在使用不同版本的支持庫時導致沖突。
當創建新的 Python 項目時,最好先創建一個新的虛擬環境,并在這個虛擬環境中安裝 Python 支持庫。
在虛擬環境中安裝、升級、卸載 Python 支持庫不會影響其他項目的虛擬環境。
此外,使用虛擬環境還有利于項目的移植與復用。
本文介紹 11 款常用的 Python 虛擬環境管理器。
venv 是 Python 內置標準庫中創建輕量級虛擬環境的工具。
venv 的功能簡單,無需單獨安裝,但如果你需要更好用的虛擬環境管理器,請繼續往下看。
venv
virtualenv 是用于創建 Python 虛擬環境的工具。雖然自 Python 3.3 起,virtualenv 的部分功能已經整合到 venv 模塊中,但 virtualenv 仍然保留了其特有的優勢。
相較于 venv,virtualenv 創建虛擬環境的速度更快。
此外,virtualenv 提供了更多的擴展和選項,能夠靈活地創建多種 Python 版本的虛擬環境,并且可以通過 pip 快速升級。
virtualenv
Pipenv 彌合了 pip、python 和 virtualenv 之間的差距。
使用 Pipfile 和 Pipfile.lock 文件,Pipenv 可以指定 Python 的版本和支持庫,并與 pyenv 進行交互操作,生成構建項目鎖文件。
Pipenv 自動為項目創建虛擬環境,在安裝、卸載支持庫時根據需要更新 Pipfile。
Pipenv 的目標是為開發者提供一致的開發環境,不再需要分別使用 pip 和 virtualenv。
Pipenv
Pyenv 讓開發者可以在多個 Python 版本之間輕松切換,解決了 venv 不能創建不同 Python 版本虛擬環境的限制。
Pyenv 支持在不同項目中切換 Python 版本。
但是,開發者有時會濫用 pyenv 設置全局的 Python 版本,導致項目之間的 Python 版本混亂,影響項目的復用和開發環境的穩定。
Pyenv 的理念很簡單,秉承了 UNIX 哲學中單一用途工具的傳統,它源自于 rbenv 和 ruby-build,并專門為 Python 進行了修改和適配。
與同類工具不同,pyenv 完全由純 Shell 腳本實現,不依賴 Python,無需擔心 Python 引導問題。
Pyenv 通過修改操作系統的 PATH 環境變量,可不同 Python 版本之間切換,并能同時運行多個 Python 版本的命令,在不同 Python 環境下進行測試和開發時特別實用。
pyenv 主要用于切換 Python 版本,并不直接管理虛擬環境。不過,可以結合 pyenv 與 virtualenv 命令,或使用 pyenv-virtualenv 插件管理虛擬環境。
pyenv 目前已經成為 Python 開發者創建虛擬環境的首選工具之一。
pyenv
Conda 是由 Anaconda 出品的命令行工具,用于在 Windows、macOS 和 Linux 上管理虛擬環境。
它不僅能管理 Python 支持庫,還能處理非 Python 支持庫,尤其針對數據科學方面的開發進行了優化。
Conda 使用自己的 Conda 虛擬環境切換非 Python 依賴項,無需使用復雜的 Docker。
與 Poetry 類似,Conda 在構建環境時執行完整的支持庫解析,其支持庫解析器 libmamba 是用 C++ 實現的,速度更快。
Conda 受到了數據科學開發人員的歡迎,但其用戶體驗仍有改進空間。
盡管如此,Conda 仍是 Python 生態系統中使用最廣泛的工具之一,尤其是在與 Ray 和 Metaflow 等第三方工具集成時。
conda
Poetry 支持安裝和更新支持庫,提供鎖文件以確保項目的復用,并能構建項目分發包。
Poetry 需要 Python 3.8+,跨平臺支持 Linux、macOS 和 Windows。
Poetry 類似于 Cargo(Rust 的包管理器) 和 npm(Node.js 的包管理器),是 Python 生態系統中使用體驗與這兩個包最接近的工具。
類似于 Conda,Poetry 預先解析完整的依賴圖,并按拓撲順序安裝支持庫。
Poetry 依據 pyproject.toml 管理項目內外的虛擬環境。
poetry.lock 文件可以確保項目的復用,但體積較大。
此外,Poetry 還兼具構建工具功能,可以發布 Python 包。
Poetry 的解析速度較慢,部分是因為 Python 包聲明支持庫的方式不一致,可能會導致支持庫解析的時間較長。
Poetry
PDM 的目標是成為新生代 Python 支持庫管理工具。
與 Poetry 類似,PDM 也是一款快速的支持庫解析器,主要用于大型二進制文件分發。
它具備靈活強大的插件系統和多功能用戶腳本。
此外,PDM 還可以使用 indygreg 的 python-build-standalone 安裝 Python,并支持類似 pnpm 的集中式安裝緩存。
PDM 與 Poetry 的主要區別在于,PDM 支持 PEP-582,將虛擬環境集成到項目目錄中,避免了傳統虛擬環境的手動激活和停用,提高了開發效率。
PDM
Huak 是使用 Rust 開發的 Python 包管理器。
JavaScript 社區目前已經出現了向 Rust 轉型的趨勢,Huak 也希望將 Rust 引入 Python 生態系統。
Rust 生態系統上手體驗很出色,Cargo 起了很大的作用。
Huak 希望為 Python 提供相同的體驗,它的目標是要達到極致速度。
Huak 的理念是改善開發者體驗,使其在開發 Python 項目時享受與 Cargo 類似的流暢感。
雖然目前 Huak 仍處于實驗階段,但其未來潛力巨大,值得關注。
Huak
Pixi 是基于 Rust 的 rattler 庫開發的,具有顯著的性能和安全優勢。
它的理念是提供類似于 cargo 或 yarn 的開發體驗。
Pixi 目標是直接取代 Conda,并能像 Conda 一樣管理非 Python 依賴項。
2024 年 2 月,為了追求更快的速度,Pixi 將后臺的 rip 改為 uv。
與 Conda 和 mamba 不同,Pixi 提供了自定義類型的鎖文件,使其在復用方面領先于 Conda。
Pixi 支持可復用的方式安裝支持庫,并支持 Python、C++ 和 R 等多種語言, 且兼容所有主流操作系統。
Pixi 還提供了簡潔而強大的命令行界面,使得支持庫管理更加簡單、高效。
Pixi
Rye 由 Astral.sh 開發,也是基于 Rust 構建的,旨在提升開發效率和用戶體驗。
與傳統的包管理工具相比,Rye 的性能有顯著提升,功能也更加豐富。
Rye 希望為 Python 開發者提供一站式的工具,讓 Python 支持庫的安裝與管理更加輕松。
Rye 使用與 uv 相同的支持庫解析器,提供更快的管理體驗。
Rye 還提供了與 poetry 類似的功能,但速度更快。
Rye
uv 也是 Astral.sh 出品的 Python 虛擬環境管理器,是當前備受期待的新生代包管理工具。
uv 的目標是取代 pip,同時具備與 Cargo 類似的功能。
uv 支持 Python 打包工具的所有特性,包括可編輯安裝、Git 依賴、URL 依賴、本地依賴、約束文件和源碼分發等。
Astral.sh 還開發了 Rust 生態中備受開發者喜愛的 ruff (用 Rust 開發的高性能 Python 代碼檢查和代碼格式化工具)。
與 poetry 類似,uv 通過 pyproject.toml 管理項目,得益于 Rust 的高效算法,其解析速度至少比 poetry 快一個量級。
目前,uv 還沒有推出穩定版,但其性能測試結果讓人期待。
圖片
uv 與主流虛擬環境管理器的性能測試對比
uv 在性能方面表現優異,相較于 pip 和 pip-tools,在沒有緩存時快 8~10 倍,在有緩存時快 80~115 倍。
uv 創建虛擬環境的速度比 venv 快 80 倍,比 virtualenv 快 7 倍,并且不依賴于 Python。
總之,uv 作為高效且兼容性強的包管理工具,有望取代 poetry 等工具。
隨著 uv 功能的不斷增強,將來可能會與 Rye 進行合并。
圖片uv
本文鏈接:http://www.tebozhan.com/showinfo-26-101713-0.html11款常用的Python虛擬環境管理器,最受推崇的居然是最后一個
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
下一篇: 我們如何管理軟件項目的交付?