您好,登錄后才能下訂單哦!
相信只要學(xué)習(xí)python的同學(xué)對(duì)于虛擬環(huán)境這個(gè)概念肯定不會(huì)太陌生,虛擬環(huán)境指的是一個(gè)個(gè)單獨(dú)隔離的python開發(fā)環(huán)境。各個(gè)虛擬環(huán)境之間互不干擾,都有自己獨(dú)立的開發(fā)包。就像是在電腦上裝了很多個(gè)虛擬機(jī),每個(gè)虛擬機(jī)里面你隨便折騰,不會(huì)影響到物理機(jī),也不會(huì)影響到其他虛擬機(jī)。
既然這么有用,那么Python里面用來創(chuàng)建虛擬環(huán)境的模塊virtualenv是怎么使用的呢?我們一起來看一下。
這個(gè)模塊比較簡(jiǎn)單,它只有一條命令,但是跟的選項(xiàng)比較多,就是通過不同的選項(xiàng)來控制生成不同的虛擬環(huán)境。我們先來簡(jiǎn)單看一下它的基本命令格式:
virtualenv [--version] [--with-traceback] [-v | -q] [--app-data APP_DATA] [--clear-app-data] [--discovery {builtin}] [-p py]
[--creator {builtin,cpython3-win,venv}] [--seeder {app-data,pip}] [--no-seed] [--activators comma_sep_list][--clear]
[--system-site-packages] [--copies] [--download | --no-download] [--extra-search-dir d [d ...]] [--pip version]
[--setuptools version] [--wheel version] [--no-pip] [--no-setuptools] [--no-wheel]
[--symlink-app-data] [--prompt prompt] [-h]
dest
乍一看,選項(xiàng)怎么這么多,一下子就能把人看暈,這還怎么學(xué)。但是在最開始使用的時(shí)候,常用的參數(shù)就只有下面兩個(gè):
參數(shù)比較抽象,我們還是通過具體的例子來實(shí)踐,
先打開cmd命令行窗口,執(zhí)行python命令,確認(rèn)你的python包安裝正確。如下所示:
C:\Users\Administrator>python
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
然后我們來安裝好virualenv模塊,命令是:
C:\Users\Administrator>pip install virtualenv
Looking in indexes: http://pypi.doubanio.com/simple
Collecting virtualenv
Downloading http://pypi.doubanio.com/packages/c1/61/7506ddd79ef6f09beeefb81c4c55bf395a8ad96b33ff1c6b06e40f8aa101/virtualenv-20.0.7-py2.py3-none-any.whl (8.0 MB)
|████████████████████████████████| 8.0 MB 6.8 MB/s
......
Installing collected packages: virtualenv
Successfully installed virtualenv-20.0.7
中間省略了一部分輸出容,但是可以看到virtualenv模塊安裝成功。然后我們就來創(chuàng)建一個(gè)新的虛擬環(huán)境:
C:\Users\Administrator>virtualenv myproject
created virtual environment CPython3.7.3.final.0-64 in 6317ms
creator CPython3Windows(dest=C:\Users\Administrator\myproject, clear=False, global=False)
seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=C:\Users\Administrator\AppData\Local\Temp\tmpsvdy5dr2\seed-app-data\v1)
activators BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
這里的虛擬環(huán)境目錄名詞是myproject,就這么簡(jiǎn)單的命令創(chuàng)建了一個(gè)虛擬環(huán)境。它位于myproject目錄下。創(chuàng)建過程中如果沒有報(bào)錯(cuò)就說明創(chuàng)建成功,同時(shí)它還指出了虛擬環(huán)境的Python版本,可以看到,就是我們系統(tǒng)當(dāng)前安裝的虛擬版本。
我們查看一下這個(gè)目錄:
C:\Users\Administrator\dir myproject
2020/03/02 17:04 <DIR> .
2020/03/02 17:04 <DIR> ..
2020/03/02 17:04 <DIR> Lib
2020/03/02 17:04 316 pyvenv.cfg
2020/03/02 17:04 <DIR> Scripts
可以看到里面有兩個(gè)目錄和一個(gè)文件,
我們來嘗試激活這個(gè)虛擬環(huán)境,命令如下:
# 切換到虛擬環(huán)境目錄
C:\Users\Administrator>cd myproject
# 激活虛擬環(huán)境
C:\Users\Administrator\myproject>Scripts\activate
此時(shí)沒有任何輸出,而且命令提示符的窗口也沒有任何改變,怎么判斷虛擬環(huán)境已經(jīng)激活成功了呢?我們使用pip命令來判斷一下,:
C:\Users\Administrator\myproject>pip list
Package Version
---------- -------
pip 20.0.2
setuptools 45.2.0
wheel 0.34.2
可以看到,這個(gè)時(shí)候的pip安裝的包只有三個(gè),分別是pip、setuptools、wheel。而我們實(shí)際的系統(tǒng)環(huán)境因?yàn)槲乙恢痹谑褂?,我重新打開一個(gè)命令提示符窗口,直接執(zhí)行pip list命令結(jié)果如下:
C:\Users\Administrator>pip list
Package Version
------------------ ---------
-ip 19.0.3
appdirs 1.4.3
attrs 19.3.0
backcall 0.1.0
bleach 3.1.0
colorama 0.4.3
decorator 4.4.1
defusedxml 0.6.0
distlib 0.3.0
Django 2.2
....
說明我們的虛擬環(huán)境確實(shí)激活成功了,只是看起來不明顯。但是這個(gè)時(shí)候虛擬環(huán)境確實(shí)已經(jīng)可以使用了。那么使用完畢后該怎么退出呢?啟動(dòng)是activate,那么退出就是deactivate。如下所示:
C:\Users\Administrator\myproject>Scripts\deactivate.bat
C:\Users\Administrator\myproject>pip list
Package Version
------------------ ---------
-ip 19.0.3
appdirs 1.4.3
attrs 19.3.0
backcall 0.1.0
bleach 3.1.0
colorama 0.4.3
decorator 4.4.1
defusedxml 0.6.0
distlib 0.3.0
Django 2.2
entrypoints 0.3
執(zhí)行完deactivate命令后,再執(zhí)行pip list命令,可以看到輸出的是系統(tǒng)python的路徑,這個(gè)時(shí)候說明已經(jīng)從虛擬環(huán)境退出了。
但是這個(gè)過程確實(shí)不太明顯,那么能不能把 虛擬環(huán)境弄的更明顯一點(diǎn)呢,我們來看看--prompt這個(gè)選項(xiàng)的用法:
C:\Users\Administrator>virtualenv --prompt myproject2 myproject2
創(chuàng)建一個(gè)新的虛擬環(huán)境叫做myproject2,但是使用了--prompt myproject2的選項(xiàng)參數(shù),我們?cè)賮韲L試激活一下看看:
C:\Users\Administrator>cd myproject2
C:\Users\Administrator\myproject2>Scripts\activate
myproject2C:\Users\Administrator\myproject2>Scripts\deactivate.bat
C:\Users\Administrator\myproject2>
這個(gè)時(shí)候很明顯就可以看到,在命令提示符前端出現(xiàn)了一個(gè)myproject2的提示,而當(dāng)我們執(zhí)行deactivate腳本后,提示符消失,說明回到了正常的環(huán)境。
這樣就比較明顯了。
上面的兩個(gè)例子演示的是直接使用系統(tǒng)版本python安裝的虛擬環(huán)境,既然是虛擬環(huán)境,那么python的版本能不能切換呢?我們來嘗試一下-p選項(xiàng)的用法。
C:\Users\Administrator>virtualenv --prompt (myproject3) -p python3.8 myproject3
PEP-514 violation in Windows Registry at HKEY_LOCAL_MACHINE/PythonCore/2.7/InstallPath error: missing
RuntimeError: failed to find interpreter for Builtin discover of python_spec='python3.8'
在上面的示例中,我嘗試創(chuàng)建以python3.8來創(chuàng)建myproject3這個(gè)項(xiàng)目,但是失敗了。它在系統(tǒng)里沒有找到python3.8的版本。
我們知道,在windows中,不同的python是可以安裝在不同的目錄中,但是你系統(tǒng)使用哪個(gè)版本,就把哪個(gè)版本的路徑添加到系統(tǒng)的環(huán)境變量最前面即可。剛才的例子里看到我目前使用的主版本是3.7.3,這個(gè)時(shí)候如果想要使用python3.8來創(chuàng)建虛擬環(huán)境的話,就需要告知3.8版本的實(shí)際路徑:
C:\Users\Administrator>virtualenv --prompt (myproject3) -p "D:\Program Files (x86)\Python38\python.exe" myproject3
created virtual environment CPython3.8.2.final.0-64 in 6798ms
creator CPython3Windows(dest=C:\Users\Administrator\myproject3, clear=False, global=False)
seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=C:\Users\Administrator\AppData\Local\Temp\tmpxuz4d8ys\seed-app-data\v1)
activators BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
這個(gè)時(shí)候就可以創(chuàng)建成功了,這里有兩點(diǎn)需要注意:
創(chuàng)建成功以后,我們嘗試激活
C:\Users\Administrator>cd myproject3
C:\Users\Administrator\myproject3>Scripts\activate
(myproject3)C:\Users\Administrator\myproject3>python
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
可以看到,確實(shí)是3.8.2版本的Python,此時(shí)新版本的虛擬環(huán)境創(chuàng)建成功。
更多相關(guān)內(nèi)容:
基本用法就是這么兩個(gè),linux系統(tǒng)下的操作和這里的類似,大家可以自己去嘗試一下,如果有遇到什么問題可以留言和阿飛一起討論。
實(shí)際使用的其他參數(shù)可以看一下下面的參數(shù)解析,寫的比較詳細(xì),大家可以根據(jù)自己的需要來查看。
如果將virtualenv的所有參數(shù)進(jìn)行分類,主要分為下面幾類:
最后兩個(gè)選項(xiàng)這里要解釋一下,信息輸出等級(jí)指的是virtualenv在執(zhí)行命令過程中輸出的信息等級(jí),分為5個(gè)類,對(duì)應(yīng)的值分別是:
也就是說-q/--quit
是將信息級(jí)別設(shè)置為CRITICAL
,即只有災(zāi)難級(jí)信息才會(huì)輸出,-v/--verbose
后面跟上對(duì)應(yīng)的值,即可調(diào)整對(duì)應(yīng)的信息級(jí)別。例如-v 4
,即將信息級(jí)別調(diào)整為DEBUG級(jí)別。
即在使用virualenv命令的時(shí)候全局通用的配置,主要有:
發(fā)現(xiàn)這個(gè)配置是用來查找目標(biāo)Python解釋器的,當(dāng)你創(chuàng)建虛擬環(huán)境的時(shí)候,你的虛擬環(huán)境以哪個(gè)Python解釋器版本作為模板來創(chuàng)建呢?這個(gè)時(shí)候就需要用到發(fā)現(xiàn)這個(gè)組件來查找了。對(duì)應(yīng)的選項(xiàng)有:
{實(shí)現(xiàn)名稱}{版本}{架構(gòu)}
,例如python3.8.1, cpython3等。創(chuàng)造器在virtualenv里的作用是,實(shí)際執(zhí)行虛擬環(huán)境創(chuàng)建過程的工具。它對(duì)應(yīng)的選項(xiàng)有:
種子器指的是什么呢?我們知道python的包管理軟件是pip,但是還有另外兩個(gè)管理軟件,分別是setuptools和wheel。而種子器就是決定虛擬環(huán)境中,安裝這三個(gè)軟件中的哪幾個(gè)。有了包管理軟件,才能安裝更多的包。就像種子發(fā)芽成熟后能結(jié)出更多的種子。所以叫seeder這樣一個(gè)名字。對(duì)應(yīng)的選項(xiàng)有:
虛擬環(huán)境配置好以后,我們?cè)趺催M(jìn)入到虛擬環(huán)境,以及怎么讓虛擬環(huán)境里的配置生效呢?這個(gè)時(shí)候就需要用到啟動(dòng)器了,啟動(dòng)器的作用是,在shell或者系統(tǒng)的環(huán)境變量里面,把虛擬環(huán)境的可執(zhí)行命令路徑添加到最前面。保證在虛擬環(huán)境中,最先找到的命令是虛擬環(huán)境里的命令。同樣的,當(dāng)虛擬環(huán)境用完以后,我們需要回到正常的環(huán)境,這個(gè)時(shí)候還需要提供虛擬環(huán)境的關(guān)閉功能。這兩個(gè)功能都是在啟動(dòng)器里實(shí)現(xiàn)的。它對(duì)應(yīng)的配置選項(xiàng)有:
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。