Python中venv虛擬環(huán)境超詳細(xì)講解
前言
venv是Python 內(nèi)置的用于創(chuàng)建虛擬環(huán)境的工具,它可以為每個項目創(chuàng)建一個獨(dú)立的 Python 環(huán)境,避免不同項目之間的依賴沖突。虛擬環(huán)境允許每個項目擁有自己的依賴庫,而不影響全局的 Python 環(huán)境。它是管理 Python 項目依賴和避免版本沖突的重要工具。
1. 什么是虛擬環(huán)境?
虛擬環(huán)境是一個獨(dú)立的 Python 環(huán)境,它與系統(tǒng)的全局 Python 環(huán)境隔離。每個虛擬環(huán)境可以有自己的 Python 版本、庫和工具,這樣不同的項目可以使用不同版本的依賴庫,而互不干擾。
python的虛擬環(huán)境總有兩款:anaconda和venv,anaconda是一個跨平臺的python發(fā)行版,提供了用于科學(xué)計算和數(shù)據(jù)分析大量的庫和工具,有著復(fù)雜的依賴項解析和環(huán)境管理能力,這個風(fēng)云以后再單獨(dú)詳細(xì)介紹,今天主要講python內(nèi)置的venv。先看下圖:
這就是虛擬環(huán)境和系統(tǒng)環(huán)境的存在關(guān)系,可以很清晰地看出,當(dāng)虛擬環(huán)境01使用python3.8,而虛擬環(huán)境使用python3.12時,它們之間又有著各自不同的依賴庫時,venv就可以將它們隔離開,保障依賴模塊的一致性,實現(xiàn)應(yīng)用穩(wěn)定。使用虛擬環(huán)境的優(yōu)點(diǎn)還有:
- 避免依賴沖突:每個項目的依賴都在獨(dú)立的環(huán)境中管理,避免了不同項目間的依賴版本沖突。
- 簡化部署:可以輕松復(fù)制環(huán)境,確保開發(fā)、測試和生產(chǎn)環(huán)境的一致性。
- 不污染全局環(huán)境:不會對全局的 Python 環(huán)境或系統(tǒng)級的 Python 庫造成影響。
2. 創(chuàng)建虛擬環(huán)境
2.1 使用 venv 創(chuàng)建虛擬環(huán)境
venv 是 Python 3.3 及以上版本自帶的模塊,因此無需安裝任何額外的庫。創(chuàng)建虛擬環(huán)境的基本命令如下:
python -m venv <env_name>
其中,<env_name> 是虛擬環(huán)境的名稱??梢灾付ㄒ粋€目錄作為虛擬環(huán)境的位置,Python 會在該目錄下創(chuàng)建虛擬環(huán)境。
示例:
# 創(chuàng)建一個名為 "myenv" 的虛擬環(huán)境
python -m venv myenv
執(zhí)行此命令后,myenv 目錄會包含以下內(nèi)容:
- bin/:包含虛擬環(huán)境中的可執(zhí)行文件(如 Python、pip)。
- lib/:包含虛擬環(huán)境的 Python 庫。
- pyvenv.cfg:虛擬環(huán)境的配置文件,包含 Python 版本等信息。
3. 激活虛擬環(huán)境
創(chuàng)建虛擬環(huán)境后,必須激活它才能在該環(huán)境中運(yùn)行 Python 和安裝依賴。
3.1 激活虛擬環(huán)境(Windows)
在 Windows 系統(tǒng)中,使用以下命令激活虛擬環(huán)境:
myenv\Scripts\activate
成功激活后,你會看到命令提示符發(fā)生變化,顯示虛擬環(huán)境的名稱:
(myenv) C:\path\to\project>
3.2 激活虛擬環(huán)境(Linux/macOS)
在 Linux 或 macOS 系統(tǒng)中,使用以下命令激活虛擬環(huán)境:
source myenv/bin/activate
成功激活后,命令行會顯示 (myenv),表示當(dāng)前處于虛擬環(huán)境中:
(myenv) user@host:path/to/project$
4. 使用虛擬環(huán)境
在虛擬環(huán)境激活后,你可以使用其中的 Python 解釋器和 pip 安裝依賴庫。
4.1 安裝依賴庫
可以使用 pip 安裝項目所需的庫,所有庫都會安裝在虛擬環(huán)境中,而不會影響全局 Python 環(huán)境。
# 安裝 requests 庫 pip install requests
安裝的依賴將會記錄在虛擬環(huán)境的 lib/ 目錄中,你可以通過 pip freeze 命令查看已安裝的庫:
pip freeze
輸出類似:
makefile
requests==2.32.3
4.2 運(yùn)行 Python 程序
在虛擬環(huán)境中,可以直接運(yùn)行 Python 程序:
python my_script.py
這里的 python 會指向虛擬環(huán)境中的 Python 解釋器。
4.3 查看虛擬環(huán)境的 Python 版本
每個虛擬環(huán)境都有獨(dú)立的 Python 解釋器,你可以通過以下命令查看當(dāng)前環(huán)境使用的 Python 版本:
python --version
4.4 使用 pip 管理依賴
在虛擬環(huán)境中,你可以使用 pip 來管理項目的依賴庫,安裝、升級、卸載庫等。
- 安裝庫:pip install <package>
- 升級庫:pip install --upgrade <package>
- 卸載庫:pip uninstall <package>
5. 退出虛擬環(huán)境
退出虛擬環(huán)境可以使用 deactivate 命令。退出后,你的終端將恢復(fù)到全局 Python 環(huán)境。
deactivate
執(zhí)行該命令后,你會看到命令行中的 (myenv) 消失,表示已經(jīng)退出虛擬環(huán)境。
6. 導(dǎo)出和導(dǎo)入虛擬環(huán)境的依賴
6.1 導(dǎo)出虛擬環(huán)境的依賴
使用 pip freeze 命令可以導(dǎo)出當(dāng)前虛擬環(huán)境中已安裝的所有依賴庫,并保存為 requirements.txt 文件。該文件可以用于在其他環(huán)境中重現(xiàn)相同的依賴。
# 導(dǎo)出當(dāng)前虛擬環(huán)境的依賴到 requirements.txt 文件 pip freeze > requirements.txt
requirements.txt 文件中將包含類似以下內(nèi)容:
requests==2.32.3
6.2 在其他環(huán)境中安裝依賴
在其他機(jī)器或虛擬環(huán)境中,可以使用 requirements.txt 文件安裝相同的依賴:
# 在另一個虛擬環(huán)境中安裝依賴 pip install -r requirements.txt
這將根據(jù) requirements.txt 文件中的信息安裝所有依賴。
7. 升級虛擬環(huán)境中的依賴
當(dāng)你需要升級虛擬環(huán)境中的某個庫時,可以使用 pip install --upgrade 命令:
# 升級 requests 庫 pip install --upgrade requests
如果你希望升級所有已安裝的庫,可以執(zhí)行:
# 升級所有依賴庫 pip install --upgrade -r requirements.txt
這樣會根據(jù) requirements.txt 中的依賴版本升級所有庫。
8. 應(yīng)用場景
8.1 項目隔離
在多個項目中使用虛擬環(huán)境,可以確保每個項目擁有獨(dú)立的依賴,不同項目間不會發(fā)生版本沖突。例如,你的項目 A 使用的是 requests==2.32.3,而項目 B 使用的是 requests==2.25.1,兩者之間不會相互干擾。
8.2 依賴管理
通過 venv 和 requirements.txt,可以輕松地將所有依賴庫的版本信息記錄下來,并在不同環(huán)境中重現(xiàn)相同的開發(fā)或生產(chǎn)環(huán)境,保證項目的可移植性和一致性。
8.3 開發(fā)和生產(chǎn)環(huán)境的切換
你可以為開發(fā)和生產(chǎn)環(huán)境創(chuàng)建不同的虛擬環(huán)境,以避免開發(fā)過程中使用的庫與生產(chǎn)環(huán)境中的庫發(fā)生沖突。這種方式有助于確保生產(chǎn)環(huán)境的穩(wěn)定性。
9. 總結(jié)
venv 是 Python 中創(chuàng)建和管理虛擬環(huán)境的標(biāo)準(zhǔn)工具,它為每個項目提供了獨(dú)立的環(huán)境,避免了庫版本沖突和依賴污染。通過本文的介紹,你應(yīng)該能夠:
- 創(chuàng)建、激活和退出虛擬環(huán)境;
- 安裝、升級和卸載項目依賴;
- 導(dǎo)出和導(dǎo)入依賴清單;
- 使用虛擬環(huán)境管理多個項目和開發(fā)環(huán)境。
venv 是 Python 項目管理中不可或缺的工具,尤其對于多項目開發(fā)和團(tuán)隊協(xié)作具有重要意義。
到此這篇關(guān)于Python中venv虛擬環(huán)境的文章就介紹到這了,更多相關(guān)Python中venv虛擬環(huán)境內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python數(shù)學(xué)建模學(xué)習(xí)模擬退火算法多變量函數(shù)優(yōu)化示例解析
模擬退火算法借鑒了統(tǒng)計物理學(xué)的思想,是一種簡單、通用的啟發(fā)式優(yōu)化算法,并在理論上具有概率性全局優(yōu)化性能,因而在科研和工程中得到了廣泛的應(yīng)用2021-10-10Python利用pyecharts實現(xiàn)數(shù)據(jù)可視化的示例代碼
Pyecharts是一個用于生成 Echarts 圖表的 Python 庫,Echarts 是一個由百度開源的數(shù)據(jù)可視化工具,它提供的圖表種類豐富,交互性強(qiáng),兼容性好,非常適合用于數(shù)據(jù)分析結(jié)果的展示,本文將給大家介紹Python利用pyecharts實現(xiàn)數(shù)據(jù)可視化,需要的朋友可以參考下2024-09-09簡單了解python filter、map、reduce的區(qū)別
這篇文章主要介紹了簡單了解python filter、map、reduce的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01基于opencv和pillow實現(xiàn)人臉識別系統(tǒng)(附demo)
人臉識別就是一個程序能識別給定圖像或視頻中的人臉,本文主要介紹了opencv和pillow實現(xiàn)人臉識別系統(tǒng),本文不涉及分類器、訓(xùn)練識別器等算法原理,感興趣的可以了解一下2021-11-11