虛擬環(huán)境概念
安裝python開發(fā)環(huán)境時(shí)交惯,相當(dāng)于安裝了一個(gè)全局的環(huán)境,包含了
site-packages(python第三方包穿仪,pip install 安裝的包都在該目錄下)席爽、Scripts(可執(zhí)行文件,pip install 時(shí)就會(huì)使用pip.exe這個(gè)可執(zhí)行文件)牡借、python.exe(python解釋器)等文件
虛擬環(huán)境可以看作是原生Python的副本拳昌,但是
標(biāo)準(zhǔn)庫(os,sys, math 等等)
都是一樣的
虛擬環(huán)境用途
python 項(xiàng)目開發(fā)時(shí)通常會(huì)使用不屬于標(biāo)準(zhǔn)庫的包和模塊,例如一些開源的類庫包钠龙。有時(shí)需要特定版本的庫
這意味著一個(gè) python包的安裝可能無法滿足各個(gè)項(xiàng)目程序的要求。如果
項(xiàng)目A
需要某個(gè)包的 1.0 版御铃,而項(xiàng)目B
需要 2.0 版碴里,則要求發(fā)生沖突,安裝 1.0 或 2.0 版將導(dǎo)致一個(gè)項(xiàng)目無法運(yùn)行上真。這個(gè)問題的解決方案是每個(gè)項(xiàng)目創(chuàng)建一個(gè)自己的虛擬環(huán)境咬腋,一個(gè)自包含的目錄樹,其中包含特定版本的 Python 的 Python 安裝睡互,以及一些額外的包
-
不同的應(yīng)用程序可以使用不同的虛擬環(huán)境根竿。為了解決前面的沖突需求示例陵像,
項(xiàng)目A
可以擁有自己的安裝了 1.0 版的虛擬環(huán)境,而項(xiàng)目B
可以擁有另一個(gè)安裝了 2.0 版的虛擬環(huán)境寇壳。如果項(xiàng)目B
需要將庫升級(jí)到版本 3.0醒颖,這不會(huì)影響項(xiàng)目A
的環(huán)境因此,我們需要
虛擬環(huán)境
用來隔離以減少解決環(huán)境問題帶來的額外開支
虛擬環(huán)境的使用
python3.3 之后
venv
已經(jīng)作為標(biāo)準(zhǔn)庫嵌入到了python中壳炎,而之前的版本需要借助virtualenv
這個(gè)第三方庫來實(shí)現(xiàn)
創(chuàng)建虛擬環(huán)境
# 指令如下:python -m venv 安裝路徑
# windows
python -m venv venv
#linux/macos
python3 -m venv venv
創(chuàng)建后泞歉,當(dāng)前目錄下多了一個(gè)名為venv
的文件夾,該目錄下結(jié)構(gòu)為
進(jìn)入Lib查看目錄結(jié)構(gòu):無
標(biāo)準(zhǔn)庫
匿辩,只有第三方
庫site-packages進(jìn)入site-packages查看目錄結(jié)構(gòu):只有類似pip的少量包腰耙,是純凈的
激活/進(jìn)入虛擬環(huán)境
# windows
venv\Scripts\activate
# linux/macox
source venv/bin/activate
命令行頭部,多了
(venv)
的字樣铲球,此模式下運(yùn)行項(xiàng)目代碼挺庞,包的路徑將會(huì)有虛擬機(jī)中的環(huán)境
使用測試一下
-
pip list
顯示中已經(jīng)沒有全局環(huán)境里的庫,是個(gè)純凈的第三方庫 - 使用
pip install xxx
安裝個(gè)第三方包后稼病,pip list
將會(huì)顯示挠阁,但在虛擬環(huán)境外,全局的pip list
中并無此包
退出/停止虛擬環(huán)境
#windows/linux/macos
deactivate
虛擬環(huán)境的好處
1.避免系統(tǒng)污染
2.隔離依賴環(huán)境
3.回避依賴沖突
環(huán)境配置文件requirements.txt用途
- 在使用python進(jìn)行項(xiàng)目開發(fā)的時(shí)候常常會(huì)調(diào)用許多包溯饵,而這些包又是在不停的更新中的
- 項(xiàng)目部署時(shí)侵俗,引用的眾多包需要全部引入才能正常運(yùn)行
- 當(dāng)前項(xiàng)目所需要的包的功能,在以后包的迭代中可能會(huì)被取代或者更新丰刊,從而導(dǎo)致在以后的某個(gè)時(shí)間重啟項(xiàng)目的時(shí)候無法運(yùn)行隘谣。所以記錄下當(dāng)項(xiàng)目所需要的包的
類型
以及版本
是非常重要的,方便以后重啟項(xiàng)目的時(shí)候可以直接安裝啄巧。
用pip批量
安裝包
- 這種方式是會(huì)在當(dāng)前路徑下生成一個(gè)
requirements.txt
文件寻歧,該文件中則會(huì)記錄當(dāng)前python環(huán)境下
所以擁有的所有包
,以及包的版本
秩仆÷敕海可以看作把pip list
這個(gè)命令展現(xiàn)的所有東西記錄下來。這種方式速度很快澄耍, -
requirements.txt
文件包含的包是當(dāng)前環(huán)境所有的包噪珊,如果你當(dāng)前項(xiàng)目沒有用到的包也會(huì)被
包括下來。
環(huán)境配置文件requirements.txt 使用方法
使用pip freeze命令生成requirements.txt文件
pip freeze > requirements.txt
每個(gè)包都獨(dú)占一行齐莲,然后是版本號(hào)痢站,生成的文件默認(rèn)在控制臺(tái)執(zhí)行目錄,也可以自定義目錄选酗,創(chuàng)建文件的時(shí)候增加文件目錄即可
pip freeze > d:/requirements.txt
- 如遇到生成該文件出現(xiàn)的時(shí)候出現(xiàn) warning阵难,建議使用python -m去執(zhí)行 pip freeze 命令
遷移/部署初始化包
遷移環(huán)境的時(shí)候,注意打包該文件芒填,然后使用如下命令部署
pip install -r requirements.txt
# 如遇到不存在的版本包則會(huì)報(bào)錯(cuò)
使用 requirements.txt 文件的好處
- 不需要每個(gè)包都使用 pip 進(jìn)行安裝
- 不需要確定第三方模塊的版本號(hào)