11款常用的Python虛擬環(huán)境管理器

Python 虛擬環(huán)境讓不同的項(xiàng)目在相互獨(dú)立的 Python 運(yùn)行環(huán)境里運(yùn)行志鞍,從而讓各項(xiàng)目的依賴庫相互獨(dú)立怎燥,避免在使用不同版本的支持庫而導(dǎo)致沖突搀庶。

當(dāng)創(chuàng)建新的 Python 項(xiàng)目時(shí)蜕径,最好先創(chuàng)建一個(gè)新的虛擬環(huán)境栈拖,并在這個(gè)虛擬環(huán)境中安裝 Python 支持庫懂从。

在虛擬環(huán)境中授段,可以隨意安裝、升級(jí)或卸載 Python 支持庫番甩,不會(huì)影響其他項(xiàng)目的虛擬環(huán)境侵贵。

此外,使用虛擬環(huán)境缘薛,還有利于項(xiàng)目的移植與復(fù)用窍育。

本文將介紹 11 款常用的 Python 虛擬環(huán)境管理器。

1. venv

venv 是內(nèi)置 Python 標(biāo)準(zhǔn)庫中用于創(chuàng)建輕量級(jí)虛擬環(huán)境的工具宴胧。

venv 的功能簡(jiǎn)單漱抓,無需單獨(dú)安裝,適合初學(xué)者使用恕齐,但如果你需要更強(qiáng)大好用的虛擬環(huán)境管理器乞娄,請(qǐng)繼續(xù)往下看。

venv

2. virtualenv

virtualenv 是用于創(chuàng)建 Python 虛擬環(huán)境的工具。自 Python 3.3 起仪或,其部分功能已經(jīng)整合到標(biāo)準(zhǔn)庫中的 venv 模塊中确镊,但 virtualenv 仍然保留了其特有的優(yōu)勢(shì)。

相較于 venv范删,virtualenv 利用了 app-data seed 方法蕾域,創(chuàng)建虛擬環(huán)境的速度更快。

此外到旦,virtualenv 提供了更多的擴(kuò)展和定制選項(xiàng)束铭,能夠靈活地創(chuàng)建多種 Python 版本的虛擬環(huán)境,并且可以通過 pip 快速升級(jí)厢绝。

virtualenv

3. Pipenv

Pipenv 是有效地彌合了 pip契沫、python 和 virtualenv 之間的差距。

使用 Pipfile 和 Pipfile.lock 文件昔汉,Pipenv 可以方便地指定 Python 版本和支持庫懈万,并與 pyenv 進(jìn)行交互操作,生成構(gòu)建項(xiàng)目鎖定文件靶病。

Pipenv 自動(dòng)為項(xiàng)目創(chuàng)建虛擬環(huán)境会通,在安裝/卸載支持庫時(shí)根據(jù)需要更新 Pipfile。

Pipenv 的主要目標(biāo)是為項(xiàng)目開發(fā)者和用戶提供一致的工作環(huán)境娄周,不再需要分別使用 pip 和 virtualenv涕侈。

使用 Pipfile 和 Pipfile.lock 分離抽象支持庫聲明和測(cè)試過的支持組合。

通過 Pipfile.lock 文件中的哈希值進(jìn)行安全驗(yàn)證煤辨。

強(qiáng)烈推薦使用最新版本的支持庫降低安全風(fēng)險(xiǎn)裳涛。

Pipenv

4. pyenv

Pyenv 讓開發(fā)者可以在多個(gè) Python 版本之間輕松切換,解決了 venv 不能創(chuàng)建不同 Python 版本虛擬環(huán)境的限制众辨。

Pyenv 支持在不同項(xiàng)目中切換 Python 版本端三,解決了同一操作系統(tǒng)中不同項(xiàng)目對(duì) Python 版本需求不同的問題。

開發(fā)者有時(shí)會(huì)濫用 pyenv 設(shè)置全局的 Python 版本鹃彻,導(dǎo)致項(xiàng)目之間的 Python 版本混亂郊闯,影響項(xiàng)目的復(fù)用和開發(fā)環(huán)境的穩(wěn)定。

Pyenv 的設(shè)計(jì)理念很簡(jiǎn)單蛛株,秉承了 UNIX 哲學(xué)中單一用途工具的傳統(tǒng)团赁,它源自于 rbenv 和 ruby-build,并專門為 Python 進(jìn)行了修改和適配谨履。

與其它同類工具不同欢摄,pyenv 完全由純 Shell 腳本實(shí)現(xiàn),不依賴 Python屉符,無需擔(dān)心 Python 引導(dǎo)問題剧浸。

Pyenv 通過修改操作系統(tǒng)的 PATH 環(huán)境變量锹引,實(shí)現(xiàn)在不同 Python 版本之間的切換矗钟,并能同時(shí)運(yùn)行多個(gè) Python 版本的命令唆香,在不同 Python 環(huán)境下進(jìn)行測(cè)試和開發(fā)時(shí)特別實(shí)用。

盡管 pyenv 主要用于切換 Python 版本吨艇,它本身并不直接管理虛擬環(huán)境躬它。不過,可以結(jié)合 pyenv 與 virtualenv 命令創(chuàng)建和管理虛擬環(huán)境东涡,或者使用 pyenv-virtualenv 插件冯吓。

pyenv 目前已經(jīng)成為 Python 開發(fā)者創(chuàng)建虛擬環(huán)境的首選工具之一。

pyenv

5. Conda

Conda 是由 Anaconda 公司出品的命令行工具疮跑,用于在 Windows组贺、macOS 和 Linux 上進(jìn)行虛擬環(huán)境管理。

它不僅能管理 Python 包祖娘,還能處理非 Python 支持庫失尖,尤其針對(duì)數(shù)據(jù)科學(xué)方面的開發(fā)進(jìn)行了優(yōu)化。

Conda 使用自己的 Conda 虛擬環(huán)境切換非 Python 依賴項(xiàng)渐苏,無需使用復(fù)雜的 Docker掀潮。

與 Poetry 類似,Conda 在構(gòu)建環(huán)境時(shí)執(zhí)行完整的支持庫解析琼富,其支持庫解析器 libmamba 是用 C++ 實(shí)現(xiàn)的仪吧,速度更快。

Conda 受到了廣大數(shù)據(jù)科學(xué)開發(fā)人員的歡迎鞠眉,但其用戶體驗(yàn)仍有改進(jìn)空間薯鼠。

用戶在與項(xiàng)目文件夾無關(guān)的 Conda 虛擬環(huán)境中操作,且支持庫和配置跟蹤可能會(huì)面臨一定挑戰(zhàn)械蹋。

盡管如此人断,Conda 仍是 Python 生態(tài)系統(tǒng)中使用最廣泛的工具之一,尤其是在與 Ray 和 Metaflow 等第三方工具集成時(shí)朝蜘。

conda

6. Poetry

Poetry 支持安裝和更新項(xiàng)目依賴支持庫恶迈,提供鎖文件以確保項(xiàng)目的復(fù)用,并能構(gòu)建項(xiàng)目分發(fā)包谱醇。

Poetry 要求 Python 3.8+暇仲,跨平臺(tái)支持 Linux、macOS 和 Windows副渴。

Poetry 類似于 Cargo(Rust 的包管理器) 和 npm(Node.js 的包管理器)奈附,是 Python 生態(tài)系統(tǒng)中使用體驗(yàn)與這兩個(gè)包最接近的工具。

類似于 Conda煮剧,Poetry 會(huì)預(yù)先解析完整的依賴圖今穿,并按拓?fù)漤樞虬惭b依賴。

Poetry 依據(jù) pyproject.toml 管理項(xiàng)目?jī)?nèi)外的虛擬環(huán)境瘾境。

poetry.lock 文件確保項(xiàng)目的復(fù)用低零,但體積較大。

此外梗夸,Poetry 還兼具構(gòu)建工具功能,可發(fā)布 Python 包。

Poetry 的依賴解析速度較慢痒筒,部分是因?yàn)?Python 包聲明支持庫的方式不一致,可能會(huì)導(dǎo)致解析支持庫解析的時(shí)間較長(zhǎng)茬贵。

Poetry

7. PDM

PDM 的目標(biāo)是成為新一代 Python 支持庫管理工具簿透。

與 Poetry 類似,PDM 也是一款簡(jiǎn)單而快速的依賴解析器解藻,主要適用于大型二進(jìn)制分發(fā)老充。

它支持 PEP 517 的構(gòu)建后端和 PEP 621 的項(xiàng)目元數(shù)據(jù),具備靈活強(qiáng)大的插件系統(tǒng)和多功能用戶腳本螟左。

此外啡浊,PDM 還可以使用 indygreg 的 python-build-standalone 安裝 Python,并支持類似 pnpm 的集中式安裝緩存路狮。

與 Poetry 的主要區(qū)別在于虫啥,PDM 支持 PEP-582,將項(xiàng)目的虛擬環(huán)境集成到項(xiàng)目目錄中奄妨,避免了傳統(tǒng)虛擬環(huán)境的手動(dòng)激活和停用涂籽,提升了開發(fā)效率。

PDM

8. Huak

Huak 是使用 Rust 開發(fā)的 Python 包管理器砸抛。JavaScript 社區(qū)中出現(xiàn)了向 Rust 轉(zhuǎn)型的趨勢(shì)评雌,Huak 也希望將 Rust 引入 Python 的生態(tài)系統(tǒng)。

Rust 生態(tài)系統(tǒng)有著出色的上手體驗(yàn)直焙,Cargo 起了很大的作用景东。

Huak 希望為 Python 提供相同的體驗(yàn),它的目標(biāo)是要達(dá)到極致速度奔誓。

Huak 的設(shè)計(jì)理念旨在提升開發(fā)者體驗(yàn)斤吐,使其在開發(fā) Python 項(xiàng)目時(shí)能夠享受到與 Cargo 類似的流暢和高效。

雖然目前 Huak 仍處于實(shí)驗(yàn)階段厨喂,但其未來潛力巨大和措,值得關(guān)注。

Huak

9. Pixi

Pixi 是基于 Rust 的 rattler 庫開發(fā)的蜕煌,具有顯著的性能和安全優(yōu)勢(shì)派阱。

它的設(shè)計(jì)理念是提供類似于 cargo 或 yarn 的用戶體驗(yàn),但適用于所有語言斜纪。

Pixi 目標(biāo)是直接取代 Conda贫母,并能像 Conda 一樣管理非 Python 依賴項(xiàng)文兑。

2024 年 2 月,為了追求更快的速度腺劣,Pixi 將后臺(tái)的 rip 轉(zhuǎn)向 uv绿贞。

與 Conda 和 mamba 不同,Pixi 提供了自定義類型的鎖文件誓酒,使其在復(fù)用方面領(lǐng)先于 Conda樟蠕。

Pixi 支持可復(fù)用的方式安裝支持庫贮聂,并支持 Python靠柑、C++ 和 R 等多種語言, 且兼容所有主流操作系統(tǒng)吓懈。

在提供高效且一致的用戶體驗(yàn)的同時(shí)歼冰,Pixi 還提供了簡(jiǎn)潔而強(qiáng)大的命令行界面,使得支持庫管理更加簡(jiǎn)單耻警、高效隔嫡。

Pixi

10. Rye

Rye 由 Astral.sh 公司維護(hù)和開發(fā),也是基于 Rust 構(gòu)建的甘穿,旨在提升開發(fā)效率和用戶體驗(yàn)腮恩。

與傳統(tǒng)的包管理工具相比,Rye 的性能有顯著提升温兼,功能也更加豐富秸滴。

Rye 希望為 Python 開發(fā)者提供一站式的工具,讓 Python 支持庫的安裝與管理更加輕松募判。

Rye 使用與 uv 相同的支持庫解析器荡含,提供更快的管理體驗(yàn)。

Rye 還提供了與 poetry 類似的功能届垫,但速度更快释液。

OpenAI 的 Python API 庫。装处,未來可能與 uv 項(xiàng)目合并误债,進(jìn)一步增強(qiáng)其功能。

通過使用與 uv 相同的依賴解析器妄迁,Rye 能夠提供更快的依賴管理體驗(yàn)寝蹈。

隨著 uv 功能的不斷增強(qiáng),將來這兩個(gè)項(xiàng)目有可能會(huì)進(jìn)行合并判族。

Rye

11. uv

uv 也是 Astral.sh 公司出品的 Python 虛擬環(huán)境管理器躺盛,它是當(dāng)前備受期待的新生代包管理工具。

uv 的目標(biāo)是成為 pip 的替代品形帮,同時(shí)具備與 Cargo 類似的功能槽惫。

uv 支持 Python 打包工具的所有特性周叮,包括可編輯安裝、Git 依賴界斜、URL 依賴仿耽、本地依賴、約束文件和源碼分發(fā)等各薇。

Astral.sh 公司還開發(fā)了 Rust 生態(tài)中備受開發(fā)者喜愛的 ruff (用 Rust 開發(fā)的高性能 Python 代碼檢查和代碼格式化工具)项贺。

與 poetry 類似,uv 通過 pyproject.toml 管理項(xiàng)目峭判,但得益于 Rust 的高效算法开缎,其依賴解析速度至少比 poetry 快一個(gè)量級(jí)。

目前林螃,uv 還沒有推出穩(wěn)定版奕删,但其性能測(cè)試結(jié)果讓人期待。

uv 與主流虛擬環(huán)境管理器的性能測(cè)試對(duì)比

uv 在性能方面表現(xiàn)優(yōu)異疗认,相較于 pip 和 pip-tools完残,在沒有緩存時(shí)快 8~10 倍,在有緩存時(shí)快 80~115 倍横漏。

uv 創(chuàng)建虛擬環(huán)境的速度比 venv 快 80 倍谨设,比 virtualenv 快 7 倍,并且不依賴于 Python缎浇。

總之扎拣,uv 作為高效且兼容性強(qiáng)的包管理工具,有望取代 poetry 等工具华畏。

uv
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鹏秋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子亡笑,更是在濱河造成了極大的恐慌侣夷,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仑乌,死亡現(xiàn)場(chǎng)離奇詭異百拓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)晰甚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門衙传,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人厕九,你說我怎么就攤上這事蓖捶。” “怎么了扁远?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵俊鱼,是天一觀的道長(zhǎng)刻像。 經(jīng)常有香客問我,道長(zhǎng)并闲,這世上最難降的妖魔是什么细睡? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮帝火,結(jié)果婚禮上溜徙,老公的妹妹穿的比我還像新娘。我一直安慰自己犀填,他們只是感情好蠢壹,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宏浩,像睡著了一般知残。 火紅的嫁衣襯著肌膚如雪靠瞎。 梳的紋絲不亂的頭發(fā)上比庄,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音乏盐,去河邊找鬼佳窑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛父能,可吹牛的內(nèi)容都是我干的神凑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼何吝,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼溉委!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起爱榕,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤瓣喊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后黔酥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體藻三,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年跪者,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棵帽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渣玲,死狀恐怖逗概,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忘衍,我是刑警寧澤逾苫,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布指巡,位于F島的核電站,受9級(jí)特大地震影響隶垮,放射性物質(zhì)發(fā)生泄漏藻雪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一狸吞、第九天 我趴在偏房一處隱蔽的房頂上張望勉耀。 院中可真熱鬧,春花似錦蹋偏、人聲如沸便斥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枢纠。三九已至,卻和暖如春黎棠,著一層夾襖步出監(jiān)牢的瞬間晋渺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工脓斩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留木西,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓随静,卻偏偏與公主長(zhǎng)得像八千,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子燎猛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容