Python內(nèi)置venv虛擬環(huán)境工具的使用完全指南
venv 是 Python 3.3 + 自帶的內(nèi)置虛擬環(huán)境工具,無(wú)需額外安裝,核心作用是為不同 Python 項(xiàng)目創(chuàng)建隔離的運(yùn)行環(huán)境,避免依賴(lài)包版本沖突。下面詳細(xì)講解它的創(chuàng)建、查看、激活、退出等核心操作,同時(shí)覆蓋不同系統(tǒng)的差異。
一、前提準(zhǔn)備
確保你的系統(tǒng)已安裝 Python 3.3+(可通過(guò) python3 --version 或 python --version 驗(yàn)證)。部分 Linux 系統(tǒng)(如 Ubuntu)默認(rèn)未安裝 venv 模塊,需先執(zhí)行以下命令安裝依賴(lài):
# Ubuntu/Debian系列 sudo apt update && sudo apt install -y python3-venv
二、核心操作詳解
1. 創(chuàng)建虛擬環(huán)境
(1)基礎(chǔ)創(chuàng)建(默認(rèn)隔離模式)
命令格式:
# 基礎(chǔ)命令:在當(dāng)前目錄創(chuàng)建名為【環(huán)境名】的虛擬環(huán)境(默認(rèn)不繼承系統(tǒng)全局包) python3 -m venv 環(huán)境名
示例
# 創(chuàng)建名為my_project_venv的虛擬環(huán)境(隔離模式) python3 -m venv my_project_venv
說(shuō)明:執(zhí)行命令后,當(dāng)前目錄會(huì)生成與 “環(huán)境名” 同名的文件夾,包含 Python 解釋器、pip 工具、依賴(lài)包存儲(chǔ)目錄等。默認(rèn)情況下,虛擬環(huán)境是完全隔離的,不會(huì)使用系統(tǒng)全局安裝的 Python 包,所有依賴(lài)需重新通過(guò) pip 安裝。
若系統(tǒng)存在多個(gè) Python 版本(如 Python3.8、Python3.10),可指定具體版本創(chuàng)建:
python3.8 -m venv my_project_venv_38 # 使用Python3.8創(chuàng)建虛擬環(huán)境 python3.10 -m venv my_project_venv_310 # 使用Python3.10創(chuàng)建虛擬環(huán)境
(2)帶 --system-site-packages 參數(shù)創(chuàng)建(繼承系統(tǒng)全局包)
參數(shù)含義:
--system-site-packages 是 venv 的核心可選參數(shù),作用是讓創(chuàng)建的虛擬環(huán)境繼承系統(tǒng)全局 Python 環(huán)境中已安裝的包(如系統(tǒng)全局安裝的 numpy、tensorflow 等),避免重復(fù)下載大型依賴(lài)包,節(jié)省磁盤(pán)空間和時(shí)間。
適用場(chǎng)景:
- 系統(tǒng)已全局安裝某個(gè)大型庫(kù)(如深度學(xué)習(xí)框架、科學(xué)計(jì)算庫(kù)),多個(gè)項(xiàng)目需共用該庫(kù),無(wú)需重復(fù)安裝;
- 部分庫(kù)依賴(lài)系統(tǒng)底層環(huán)境(如硬件驅(qū)動(dòng)相關(guān)包),全局安裝后需在虛擬環(huán)境中直接使用。
命令格式與示例:
# 帶系統(tǒng)包繼承的創(chuàng)建命令 python3 -m venv --system-site-packages 環(huán)境名 # 示例:創(chuàng)建繼承系統(tǒng)全局包的虛擬環(huán)境(命名建議帶標(biāo)識(shí),方便區(qū)分) python3 -m venv --system-site-packages my_project_venv_with_global
關(guān)鍵注意事項(xiàng):
- 繼承時(shí)機(jī):僅在虛擬環(huán)境創(chuàng)建時(shí)同步系統(tǒng)全局包,后續(xù)在系統(tǒng)全局安裝的新包,不會(huì)自動(dòng)同步到已創(chuàng)建的虛擬環(huán)境(需重新創(chuàng)建或手動(dòng)在虛擬環(huán)境中安裝);
- 版本優(yōu)先級(jí):虛擬環(huán)境中通過(guò) pip 安裝的包,優(yōu)先級(jí)高于繼承的系統(tǒng)全局包(即若虛擬環(huán)境和系統(tǒng)全局安裝了同一包的不同版本,會(huì)優(yōu)先使用虛擬環(huán)境中的版本);
- 兼容性風(fēng)險(xiǎn):若系統(tǒng)全局包版本與項(xiàng)目需求沖突,可能導(dǎo)致項(xiàng)目報(bào)錯(cuò),此時(shí)建議使用基礎(chǔ)隔離模式創(chuàng)建虛擬環(huán)境,單獨(dú)安裝適配版本的依賴(lài)。
2. 查看虛擬環(huán)境
核心邏輯:venv 創(chuàng)建的虛擬環(huán)境本質(zhì)是普通文件夾,沒(méi)有專(zhuān)屬的查詢命令,需通過(guò)系統(tǒng)的文件查詢指令查看。
不同系統(tǒng)操作:
| 系統(tǒng)類(lèi)型 | 查看命令 | 說(shuō)明 |
|---|---|---|
| Linux/macOS | ls 目錄路徑(默認(rèn)當(dāng)前目錄直接輸入 ls) | 列出指定目錄下的文件夾,虛擬環(huán)境文件夾即為已創(chuàng)建的環(huán)境(如 my_project_venv) |
| Windows(CMD) | dir 目錄路徑(默認(rèn)當(dāng)前目錄直接輸入 dir) | 列出當(dāng)前目錄下的文件夾 / 文件,可見(jiàn)虛擬環(huán)境文件夾 |
| Windows(PowerShell) | Get-ChildItem(簡(jiǎn)寫(xiě) gci) | 效果同 dir,更簡(jiǎn)潔的 PowerShell 指令 |
示例(Linux/macOS):
# 查看當(dāng)前目錄下的虛擬環(huán)境 ls # 輸出:my_project_venv my_project_venv_with_global (兩個(gè)虛擬環(huán)境文件夾) # 查看指定目錄下的虛擬環(huán)境(如~/projects/venvs/) ls ~/projects/venvs/
3. 激活虛擬環(huán)境
激活后,終端會(huì)顯示虛擬環(huán)境名稱(chēng)前綴(如 (my_project_venv)),此時(shí)通過(guò) pip 安裝的依賴(lài)會(huì)僅存于該環(huán)境(繼承模式下,新增依賴(lài)仍安裝在虛擬環(huán)境內(nèi),不影響系統(tǒng)全局)。
不同系統(tǒng)激活命令:
| 系統(tǒng)類(lèi)型 | 激活命令 |
|---|---|
| Linux/macOS | source 環(huán)境名 /bin/activate(示例:source my_project_venv_with_global/bin/activate) |
| Windows(CMD) | 環(huán)境名 \Scripts\activate.bat(示例:my_project_venv_with_global\Scripts\activate.bat) |
| Windows(PowerShell) | .\ 環(huán)境名 \Scripts\Activate.ps1(示例:.\my_project_venv_with_global\Scripts\Activate.ps1) |
激活成功標(biāo)識(shí):終端前綴會(huì)新增 (環(huán)境名),例如:
- Linux/macOS:
(my_project_venv_with_global) user@localhost:~$ - Windows:
(my_project_venv_with_global) C:\Users\XXX\>
驗(yàn)證激活狀態(tài)(可選):
# 查看當(dāng)前Python路徑(指向虛擬環(huán)境內(nèi)的Python解釋器) which python3 # Linux/macOS where python # Windows # 查看當(dāng)前pip路徑(指向虛擬環(huán)境內(nèi)的pip) which pip3 # Linux/macOS where pip # Windows # 驗(yàn)證繼承的系統(tǒng)包(繼承模式下執(zhí)行,可看到系統(tǒng)全局安裝的包) pip list # 列出虛擬環(huán)境中的所有包(含繼承的系統(tǒng)包和后續(xù)安裝的包)
4. 退出虛擬環(huán)境
命令(所有系統(tǒng)通用):在已激活虛擬環(huán)境的終端中,直接輸入以下命令,無(wú)需額外參數(shù):
deactivate
退出成功標(biāo)識(shí):終端前綴的 (環(huán)境名) 消失,恢復(fù)到系統(tǒng)默認(rèn)終端樣式,此時(shí)操作會(huì)回到系統(tǒng)全局 Python 環(huán)境。
三、補(bǔ)充操作:刪除虛擬環(huán)境
venv 虛擬環(huán)境是普通文件夾,直接刪除對(duì)應(yīng)文件夾即可(刪除后不可恢復(fù),需謹(jǐn)慎操作):
| 系統(tǒng)類(lèi)型 | 刪除命令 / 操作 |
|---|---|
| Linux/macOS | rm -rf 環(huán)境名(示例:rm -rf my_project_venv_with_global) |
| Windows | 手動(dòng)刪除環(huán)境文件夾,或在 CMD/PowerShell 中執(zhí)行 rd /s/q 環(huán)境名(示例:rd /s/q my_project_venv_with_global) |
四、核心總結(jié)
| 操作 | 命令格式 | 關(guān)鍵說(shuō)明 |
|---|---|---|
| 基礎(chǔ)隔離模式創(chuàng)建 | python3 -m venv 環(huán)境名 | 完全隔離系統(tǒng)全局包,依賴(lài)需重新安裝,無(wú)版本沖突風(fēng)險(xiǎn) |
| 繼承系統(tǒng)包創(chuàng)建 | python3 -m venv --system-site-packages 環(huán)境名 | 繼承系統(tǒng)全局包,節(jié)省空間,注意版本兼容性 |
| 激活虛擬環(huán)境 | 按系統(tǒng)選擇對(duì)應(yīng)命令(如 Linux:source 環(huán)境名 /bin/activate) | 激活后終端帶環(huán)境名前綴,操作僅作用于當(dāng)前環(huán)境 |
| 退出虛擬環(huán)境 | deactivate | 所有系統(tǒng)通用,退出后回到全局 Python 環(huán)境 |
| 查看虛擬環(huán)境 | ls(Linux/macOS)/ dir(Windows) | 虛擬環(huán)境本質(zhì)是文件夾,通過(guò)系統(tǒng)命令查看 |
| 刪除虛擬環(huán)境 | rm -rf 環(huán)境名(Linux/macOS)/rd/s /q 環(huán)境名(Windows) | 直接刪除文件夾,需先退出虛擬環(huán)境,刪除后不可恢復(fù) |
venv 輕量、無(wú)額外依賴(lài),是簡(jiǎn)單 Python 項(xiàng)目環(huán)境隔離的首選工具?;A(chǔ)隔離模式適合大多數(shù)場(chǎng)景,--system-site-packages 參數(shù)則為大型依賴(lài)復(fù)用提供了便捷方案,可根據(jù)項(xiàng)目需求靈活選擇~
到此這篇關(guān)于Python內(nèi)置venv虛擬環(huán)境工具的使用完全指南的文章就介紹到這了,更多相關(guān)Python venv虛擬環(huán)境內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python列表對(duì)象實(shí)現(xiàn)原理詳解
這篇文章主要介紹了Python列表對(duì)象實(shí)現(xiàn)原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Python?實(shí)現(xiàn)圖像特效中的油畫(huà)效果
這篇文章主要是為大家簡(jiǎn)單介紹一下圖像添加油畫(huà)特效的基本原理以及代碼實(shí)現(xiàn),文中的示例代碼很詳細(xì),對(duì)我們學(xué)習(xí)或者工作有一點(diǎn)的價(jià)值,感興趣的小伙伴可以了解一下2021-12-12
pytorch排查loss值出現(xiàn)nan的情況及解決
在實(shí)驗(yàn)室訓(xùn)練中,損失值出現(xiàn)nan是因條件篩選導(dǎo)致空列表,觸發(fā)torch.log()錯(cuò)誤,通過(guò)包裹訓(xùn)練代碼快速定位問(wèn)題,最終解決方案是添加1e-7常量確保數(shù)值穩(wěn)定性,避免計(jì)算異常2025-09-09
python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5樹(shù)形結(jié)構(gòu)控件QTreeWidget詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了python GUI庫(kù)圖形界面開(kāi)發(fā)PyQt5樹(shù)形結(jié)構(gòu)控件QTreeWidget詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-03-03
Python實(shí)現(xiàn)文件壓縮和解壓的示例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)文件壓縮和解壓的方法,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-08-08
Python&Matlab實(shí)現(xiàn)螞蟻群算法求解最短路徑問(wèn)題的示例
本文主要介紹了Python&Matlab實(shí)現(xiàn)螞蟻群算法求解最短路徑問(wèn)題的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
jenkins配置python腳本定時(shí)任務(wù)過(guò)程圖解
這篇文章主要介紹了jekins配置python腳本定時(shí)任務(wù)過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
快速掌握python權(quán)限功能設(shè)計(jì)實(shí)戰(zhàn)指南
在處理權(quán)限控制時(shí),裝飾器能幫助我們以一種統(tǒng)一且簡(jiǎn)潔的方式管理不同用戶對(duì)系統(tǒng)資源的訪問(wèn)權(quán)限,本文將通過(guò)幾個(gè)簡(jiǎn)單的示例逐步展示如何利用Python裝飾器實(shí)現(xiàn)從基礎(chǔ)到復(fù)雜的權(quán)限控制功能2024-01-01

