一、什么是虛擬環(huán)境
安裝python的時(shí)候相當(dāng)于安裝了一個(gè)全局的環(huán)境:
site-packages目錄下是python第三方包(也就是pip install 安裝的包都在該目錄下)
標(biāo)準(zhǔn)庫(kù)就是原生庫(kù)(os,sys, math 等等)
Scripts下是可執(zhí)行文件(pip install 時(shí)就會(huì)使用pip.exe這個(gè)可執(zhí)行文件)
python.exe就是python解釋器
虛擬環(huán)境可以看作是原生Python的副本,但是標(biāo)準(zhǔn)庫(kù)都是一樣的,每次都復(fù)制是不合算的
所以每次就不復(fù)制標(biāo)準(zhǔn)庫(kù),而是直接調(diào)用原來(lái)的標(biāo)準(zhǔn)庫(kù)就行。
同時(shí)解釋器也存到Scripts這個(gè)目錄下,path環(huán)境變量只需要增加一個(gè)即可。
二、使用venv創(chuàng)建虛擬環(huán)境及其目錄結(jié)構(gòu)
python3.3 之后venv已經(jīng)作為標(biāo)準(zhǔn)庫(kù)嵌入到了python中,而之前的版本需要借助virtualenv這個(gè)第三方庫(kù)來(lái)實(shí)現(xiàn)。
在終端中使用python -m venv -h可以顯示venv工具的用法。
介紹的兩個(gè)選項(xiàng):
--system-site-packages代表使用全局環(huán)境中的第三方庫(kù)(否則虛擬環(huán)境直接是純潔的第三方庫(kù))
--without-pip代表不安裝pip(一般都是要裝的,所以默認(rèn)就行)
創(chuàng)建虛擬環(huán)境
所以正常創(chuàng)建虛擬環(huán)境指令如下:python -m venv 安裝路徑
在當(dāng)前目錄下安裝venvdemo這個(gè)虛擬環(huán)境
C:\Users\sunh_>python -m venv venvdemo
1
虛擬環(huán)境目錄分析
進(jìn)入虛擬環(huán)境查看目錄結(jié)構(gòu):Lib是工具包,Scripts是可執(zhí)行文件(和第一節(jié)描述相同)
C:\Users\sunh_>cd venvdemo
C:\Users\sunh_\venvdemo>dir
驅(qū)動(dòng)器 C 中的卷是 Windows-SSD
卷的序列號(hào)是 F639-05B6
C:\Users\sunh_\venvdemo 的目錄
2022/03/03 14:14 <DIR> .
2022/03/03 14:14 <DIR> ..
2022/03/03 14:14 <DIR> Include
2022/03/03 14:14 <DIR> Lib
2022/03/03 14:14 77 pyvenv.cfg
2022/03/03 14:15 <DIR> Scripts
1 個(gè)文件 77 字節(jié)
5 個(gè)目錄 10,210,123,776 可用字節(jié)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
進(jìn)入Lib查看目錄結(jié)構(gòu):無(wú)標(biāo)準(zhǔn)庫(kù),有第三方庫(kù)site-packages
進(jìn)入site-packages查看目錄結(jié)構(gòu):只有類似pip的少量包,是純凈的
C:\Users\sunh_\venvdemo>cd Lib
C:\Users\sunh_\venvdemo\Lib>dir
驅(qū)動(dòng)器 C 中的卷是 Windows-SSD
卷的序列號(hào)是 F639-05B6
C:\Users\sunh_\venvdemo\Lib 的目錄
2022/03/03 14:14 <DIR> .
2022/03/03 14:14 <DIR> ..
2022/03/03 14:15 <DIR> site-packages
0 個(gè)文件 0 字節(jié)
3 個(gè)目錄 10,210,156,544 可用字節(jié)
C:\Users\sunh_\venvdemo\Lib>cd site-packages
C:\Users\sunh_\venvdemo\Lib\site-packages>dir
驅(qū)動(dòng)器 C 中的卷是 Windows-SSD
卷的序列號(hào)是 F639-05B6
C:\Users\sunh_\venvdemo\Lib\site-packages 的目錄
2022/03/03 14:15 <DIR> .
2022/03/03 14:14 <DIR> ..
2022/03/03 14:15 126 easy_install.py
2022/03/03 14:15 <DIR> pip
2022/03/03 14:15 <DIR> pip-19.0.3.dist-info
2022/03/03 14:15 <DIR> pkg_resources
2022/03/03 14:15 <DIR> setuptools
2022/03/03 14:15 <DIR> setuptools-40.8.0.dist-info
2022/03/03 14:15 <DIR> pycache
1 個(gè)文件 126 字節(jié)
8 個(gè)目錄 10,210,156,544 可用字節(jié)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
退回,進(jìn)入Scripts庫(kù)查看目錄結(jié)構(gòu):可以看到包括pip.exe和python.exe的可執(zhí)行文件。
由于使用虛擬環(huán)境是需要激活的,所以可以看到下面的文件:activate是linux下的激活文件;
activate.bat和Activate.ps1是windows下的激活文件;
deactivate.bat用來(lái)關(guān)閉虛擬環(huán)境。
C:\Users\sunh_\venvdemo\Lib\site-packages>cd ..
C:\Users\sunh_\venvdemo\Lib>cd ..
C:\Users\sunh_\venvdemo>cd Scripts
C:\Users\sunh_\venvdemo\Scripts>dir
驅(qū)動(dòng)器 C 中的卷是 Windows-SSD
卷的序列號(hào)是 F639-05B6
C:\Users\sunh_\venvdemo\Scripts 的目錄
2022/03/03 14:15 <DIR> .
2022/03/03 14:14 <DIR> ..
2022/03/03 14:15 2,287 activate
2022/03/03 14:15 1,025 activate.bat
2022/03/03 14:15 1,495 Activate.ps1
2022/03/03 14:15 368 deactivate.bat
2022/03/03 14:15 102,781 easy_install-3.7.exe
2022/03/03 14:15 102,781 easy_install.exe
2022/03/03 14:15 102,763 pip.exe
2022/03/03 14:15 102,763 pip3.7.exe
2022/03/03 14:15 102,763 pip3.exe
2022/03/03 14:14 522,768 python.exe
2022/03/03 14:14 522,256 pythonw.exe
11 個(gè)文件 1,564,050 字節(jié)
2 個(gè)目錄 10,210,152,448 可用字節(jié)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
激活虛擬環(huán)境
直接激活虛擬環(huán)境
source activate 虛擬環(huán)境名字
1
或者在Scripts目錄下調(diào)用activate文件激活虛擬環(huán)境
C:\Users\sunh_\venvdemo\Scripts>activate
1
可以看到前面有(venvdemo)的前綴,表明現(xiàn)在是在該虛擬環(huán)境下操作的
(venvdemo) C:\Users\sunh_\venvdemo\Scripts>
1
查看當(dāng)前環(huán)境內(nèi)的第三方庫(kù):已經(jīng)沒(méi)有全局環(huán)境里的庫(kù),是個(gè)純凈的第三方庫(kù)
(venvdemo) C:\Users\sunh_\venvdemo\Scripts>pip list
Package Version
pip 19.0.3
setuptools 40.8.0
You are using pip version 19.0.3, however version 22.0.3 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
1
2
3
4
5
6
7
虛擬環(huán)境做了什么
其實(shí)激活虛擬環(huán)境就是在環(huán)境變量PATH中插入激活的虛擬環(huán)境的路徑
虛擬環(huán)境的環(huán)境變量就排在了原生pathon的環(huán)境變量的前面。
關(guān)閉虛擬環(huán)境
(venvdemo) C:\Users\sunh_\venvdemo\Scripts>deactivate
1
也就是將環(huán)境變量PATH從去除掉,從而關(guān)閉虛擬環(huán)境。
三、虛擬環(huán)境重要性
解釋1:如果一個(gè)環(huán)境要做很多任務(wù)就要安裝很多第三方包,第三方包與包之間有時(shí)候會(huì)出現(xiàn)版本不兼容,從而導(dǎo)致不可用;而且包一多就很難管理一個(gè)環(huán)境。如果我們將每個(gè)任務(wù)限定在虛擬環(huán)境中操作,只安裝這個(gè)任務(wù)需要的包,那么會(huì)大大減少不兼容問(wèn)題的發(fā)生記幾率。
解釋2:可以直接通過(guò)虛擬環(huán)境來(lái)配置別人項(xiàng)目的運(yùn)行環(huán)境,從而可以運(yùn)行別人的代碼。
四、PyCharm中的虛擬環(huán)境
由第二節(jié)可知,激活主要就是在環(huán)境變量中插隊(duì),使其用虛擬環(huán)境下的解釋器 python.exe編譯;
那么如果IDE直接知道我們的解釋器路徑,那么就不需要激活也可以使用虛擬環(huán)境。
重點(diǎn)就在于解釋器 python.exe的位置
創(chuàng)建項(xiàng)目時(shí),可以選擇已經(jīng)存在的解釋器,也就是選擇在哪個(gè)虛擬環(huán)境下運(yùn)行。(相對(duì)的,你選擇哪個(gè)虛擬環(huán)境的編譯器你就只能用那個(gè)環(huán)境下的包,虛擬環(huán)境間的第三方庫(kù)是不互通的)
如果沒(méi)有想要的虛擬環(huán)境,那么直接在 … 處選擇你需要的虛擬環(huán)境下的xxx\Scripts\python.exe路徑即可。
也可以使用IDE進(jìn)行新建虛擬環(huán)境:
從上而下分別是:
New environment using:選擇創(chuàng)建創(chuàng)建虛擬環(huán)境的工具
Location:創(chuàng)建的虛擬環(huán)境的位置
Base interpreter:基于哪個(gè)版本的python解釋器創(chuàng)建
Inherit global site-packages:是否繼承base interpreter的第三方庫(kù)(同命令行中的–site-packages-命令)
Make available to all projects:是否別的項(xiàng)目可以用這個(gè)虛擬環(huán)境編譯
IDE創(chuàng)建的虛擬環(huán)境的目錄結(jié)構(gòu):和第二節(jié)分析的那個(gè)目錄結(jié)構(gòu)是一樣的,其實(shí)就可以看作是IDE幫你使用命令行的模式來(lái)創(chuàng)建虛擬環(huán)境。
五、保存和復(fù)制虛擬環(huán)境
(venvdemo) C:\Users\sunh_\venvdemo\Scripts>pip freeze >requirements.txt
1
使用pip freeze >requirements.txt命令將虛擬環(huán)境的庫(kù) 凍結(jié)后存到requirements.txt文件里。
(venvdemo) C:\Users\sunh_\venvdemo\Scripts>pip install -r requiremnets.txt
1
別人只需要通過(guò)pip install -r requiremnets.txt即可安裝此項(xiàng)目運(yùn)行需要的包。
六、總結(jié)
虛擬環(huán)境給項(xiàng)目提供了一個(gè)編譯運(yùn)行的環(huán)境(提供給項(xiàng)目它需要的包);
用哪個(gè)環(huán)境下的解釋器就只能用哪個(gè)環(huán)境下的包,所以解釋器的選擇是很重要的。
————————————————
版權(quán)聲明:本文為CSDN博主「Tony」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_44643484/article/details/123251333