python虛擬環(huán)境模塊venv使用及示例
相信只要學(xué)習(xí)python的同學(xué)對于虛擬環(huán)境這個概念肯定不會太陌生,虛擬環(huán)境指的是一個個單獨(dú)隔離的python開發(fā)環(huán)境。各個虛擬環(huán)境之間互不干擾,都有自己獨(dú)立的開發(fā)包。就像是在電腦上裝了很多個虛擬機(jī),每個虛擬機(jī)里面你隨便折騰,不會影響到物理機(jī),也不會影響到其他虛擬機(jī)。
既然這么有用,那么Python里面用來創(chuàng)建虛擬環(huán)境的模塊virtualenv是怎么使用的呢?我們一起來看一下。
virtualenv基本命令格式
這個模塊比較簡單,它只有一條命令,但是跟的選項(xiàng)比較多,就是通過不同的選項(xiàng)來控制生成不同的虛擬環(huá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ù)就只有下面兩個:
- -p py 用于選擇python解釋器版本的
- dest 要存放虛擬環(huán)境的目錄,一般是項(xiàng)目目錄
- --prompt prompt 設(shè)置虛擬環(huán)境命令提示符前端提示。
參數(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)建一個新的虛擬環(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,就這么簡單的命令創(chuàng)建了一個虛擬環(huán)境。它位于myproject目錄下。創(chuàng)建過程中如果沒有報錯就說明創(chuàng)建成功,同時它還指出了虛擬環(huán)境的Python版本,可以看到,就是我們系統(tǒng)當(dāng)前安裝的虛擬版本。
我們查看一下這個目錄:
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
可以看到里面有兩個目錄和一個文件,
- Lib目錄是必須的庫文件目錄,
- Scripts是虛擬環(huán)境的二進(jìn)制命令文件目錄以及啟動器所在目錄。啟動器就是待會我們要用來激活虛擬環(huán)境的目錄。
- pyvenv.cfg文件是這個虛擬環(huán)境的配置文件
我們來嘗試激活這個虛擬環(huán)境,命令如下:
# 切換到虛擬環(huán)境目錄 C:\Users\Administrator>cd myproject # 激活虛擬環(huán)境 C:\Users\Administrator\myproject>Scripts\activate
此時沒有任何輸出,而且命令提示符的窗口也沒有任何改變,怎么判斷虛擬環(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
可以看到,這個時候的pip安裝的包只有三個,分別是pip、setuptools、wheel。而我們實(shí)際的系統(tǒng)環(huán)境因?yàn)槲乙恢痹谑褂?,我重新打開一個命令提示符窗口,直接執(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í)激活成功了,只是看起來不明顯。但是這個時候虛擬環(huán)境確實(shí)已經(jī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的路徑,這個時候說明已經(jīng)從虛擬環(huán)境退出了。
但是這個過程確實(shí)不太明顯,那么能不能把 虛擬環(huán)境弄的更明顯一點(diǎn)呢,我們來看看--prompt這個選項(xiàng)的用法:
C:\Users\Administrator>virtualenv --prompt myproject2 myproject2
創(chuàng)建一個新的虛擬環(huán)境叫做myproject2,但是使用了--prompt myproject2的選項(xiàng)參數(shù),我們再來嘗試激活一下看看:
C:\Users\Administrator>cd myproject2 C:\Users\Administrator\myproject2>Scripts\activate myproject2C:\Users\Administrator\myproject2>Scripts\deactivate.bat C:\Users\Administrator\myproject2>
這個時候很明顯就可以看到,在命令提示符前端出現(xiàn)了一個myproject2的提示,而當(dāng)我們執(zhí)行deactivate腳本后,提示符消失,說明回到了正常的環(huán)境。
這樣就比較明顯了。
上面的兩個例子演示的是直接使用系統(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這個項(xiàng)目,但是失敗了。它在系統(tǒng)里沒有找到python3.8的版本。
我們知道,在windows中,不同的python是可以安裝在不同的目錄中,但是你系統(tǒng)使用哪個版本,就把哪個版本的路徑添加到系統(tǒng)的環(huán)境變量最前面即可。剛才的例子里看到我目前使用的主版本是3.7.3,這個時候如果想要使用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
這個時候就可以創(chuàng)建成功了,這里有兩點(diǎn)需要注意:
- 必須給出python.exe文件的絕對路徑
- 路徑中如果有空格,則必須使用雙引號括起。
創(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,此時新版本的虛擬環(huán)境創(chuàng)建成功。
基本用法就是這么兩個,linux系統(tǒng)下的操作和這里的類似,大家可以自己去嘗試一下,如果有遇到什么問題可以留言和阿飛一起討論。
實(shí)際使用的其他參數(shù)可以看一下下面的參數(shù)解析,寫的比較詳細(xì),大家可以根據(jù)自己的需要來查看。
參數(shù)解析
如果將virtualenv的所有參數(shù)進(jìn)行分類,主要分為下面幾類:
1. 只用于輸出信息的,包括下面幾個:
- --version 輸出virtualenv版本信息
- -h, --help 輸出virtualenv幫助信息
- --with-traceback,在創(chuàng)建虛擬環(huán)境失敗的時候,輸出追蹤信息。
- -v, --verbose,設(shè)置輸出信息等級,一般用于增加信息輸出等級,默認(rèn)值是2
- -q, --quit,設(shè)置輸出信息等級,一般用于降低信息輸出等級,默認(rèn)值是0
最后兩個選項(xiàng)這里要解釋一下,信息輸出等級指的是virtualenv在執(zhí)行命令過程中輸出的信息等級,分為5個類,對應(yīng)的值分別是:
- CRITICAL 0 災(zāi)難級信息
- ERROR 1 錯誤級信息
- WARNING 2 警告級信息
- INFO 3 普通信息
- DEBUG 4調(diào)試信息
- NOTEST 5 非測試信息
也就是說-q/--quit是將信息級別設(shè)置為CRITICAL,即只有災(zāi)難級信息才會輸出,-v/--verbose 后面跟上對應(yīng)的值,即可調(diào)整對應(yīng)的信息級別。例如-v 4,即將信息級別調(diào)整為DEBUG級別。
2. 通用設(shè)置
即在使用virualenv命令的時候全局通用的配置,主要有:
- --app-data APP_DATA 用于配置virutalenv使用的緩存目錄,默認(rèn)是<temp 目錄>,對于windows系統(tǒng)通常是%USERPROFILE%\AppData\Local\Temp這個目錄,對于linux系統(tǒng)是/tmp目錄。
- --clear-app-data virtualenv啟動的時候使用空的app數(shù)據(jù)目錄,默認(rèn)值False,即默認(rèn)使用緩存目錄,便于加快虛擬環(huán)境創(chuàng)建。
3. 發(fā)現(xiàn)
發(fā)現(xiàn)這個配置是用來查找目標(biāo)Python解釋器的,當(dāng)你創(chuàng)建虛擬環(huán)境的時候,你的虛擬環(huán)境以哪個Python解釋器版本作為模板來創(chuàng)建呢?這個時候就需要用到發(fā)現(xiàn)這個組件來查找了。對應(yīng)的選項(xiàng)有:
- --discovery {builtin} 解釋器發(fā)現(xiàn)方法,默認(rèn)值builtin,即內(nèi)置的發(fā)現(xiàn)組件?,F(xiàn)在好像只有這一個可以選擇。也就是說,這個選項(xiàng)目前對于普通用戶來說沒什么用。除非你能夠自己實(shí)現(xiàn)一個發(fā)現(xiàn)組件。
- -p py, --python py,用于創(chuàng)建虛擬環(huán)境的目標(biāo)python解釋器,即以這個參數(shù)指定的python解釋器版本來創(chuàng)建虛擬環(huán)境。默認(rèn)值是你當(dāng)前安裝virutalenv的python解釋器。它有兩種格式,分別是:
- I. python解釋器的絕對路徑。
- II. python版本的字符串表示,字符串的格式是{實(shí)現(xiàn)名稱}{版本}{架構(gòu)},例如python3.8.1, cpython3等。
4. 創(chuàng)造器(creator)
創(chuàng)造器在virtualenv里的作用是,實(shí)際執(zhí)行虛擬環(huán)境創(chuàng)建過程的工具。它對應(yīng)的選項(xiàng)有:
- --creator {builtin, cpyhon3-win, venv},即通過哪個python解釋器來創(chuàng)建虛擬環(huán)境,默認(rèn)是builtin,即安裝virtualenv的python版本。
- dest,即安裝虛擬環(huán)境的目標(biāo)目錄,可以使用相對路徑和絕對路徑
- --clear,當(dāng)目標(biāo)目錄存在的時候,會移除目標(biāo)目錄,或者覆蓋目標(biāo)文件,默認(rèn)值False
- --system-site-packages, 允許虛擬環(huán)境訪問系統(tǒng)site-packages目錄,默認(rèn)值False
- --copies, --always-copy,使用復(fù)制而不是鏈接來創(chuàng)建虛擬環(huán)境,即使平臺的默認(rèn)配置是使用鏈接的方式。默認(rèn)值True。創(chuàng)建虛擬環(huán)境有兩種方式,第一種是復(fù)制模板Python里的文件到虛擬環(huán)境中,第二種方式是從模板Python那里創(chuàng)建軟鏈接到虛擬環(huán)境中,第二種速度更快,但是虛擬環(huán)境受到模板Python的影響也更大。因此一般推薦使用copy的方式。
5. 種子器(seeder)
種子器指的是什么呢?我們知道python的包管理軟件是pip,但是還有另外兩個管理軟件,分別是setuptools和wheel。而種子器就是決定虛擬環(huán)境中,安裝這三個軟件中的哪幾個。有了包管理軟件,才能安裝更多的包。就像種子發(fā)芽成熟后能結(jié)出更多的種子。所以叫seeder這樣一個名字。對應(yīng)的選項(xiàng)有:
- --seeder {app-data, pip},種子包安裝方法,默認(rèn)值app-data,即從緩存目錄里安裝。
- --no-seed, --without-pip,即不安裝種子包(默認(rèn)值False)
- --download 從PyPI上下載安裝最新版本的pip/setuptools/wheel,默認(rèn)值False
- --no-download, --never-download,不下載最新版的pip/setuptools/wheel,默認(rèn)值True
- --extrea-search-dir,種除了默認(rèn)的Python安裝的包以外,種子器可能會使用的包含其他包的路徑,默認(rèn)值是[]
- --pip version, --wheel version, --setuptools version,要安裝的pip,wheel,setuptools版本,默認(rèn)值都是latest
- --no-pip,--no-wheel,--no-setuptools,不安裝pip,wheel,setuptools,默認(rèn)值都是False
- --symlink-app-data,從app-data目錄鏈接python包到虛擬環(huán)境(目前還不支持,要求種子pip>=19.3,默認(rèn)值False)
6. 啟動器(activator)
虛擬環(huán)境配置好以后,我們怎么進(jìn)入到虛擬環(huán)境,以及怎么讓虛擬環(huán)境里的配置生效呢?這個時候就需要用到啟動器了,啟動器的作用是,在shell或者系統(tǒng)的環(huán)境變量里面,把虛擬環(huán)境的可執(zhí)行命令路徑添加到最前面。保證在虛擬環(huán)境中,最先找到的命令是虛擬環(huán)境里的命令。同樣的,當(dāng)虛擬環(huán)境用完以后,我們需要回到正常的環(huán)境,這個時候還需要提供虛擬環(huán)境的關(guān)閉功能。這兩個功能都是在啟動器里實(shí)現(xiàn)的。它對應(yīng)的配置選項(xiàng)有:
- --activator comma_sep_list, 要生成的啟動器列表,用逗號分隔。因?yàn)槟阍诓煌南到y(tǒng)中使用的是不同的shell,例如linux中有bash、tcsh、dash、zsh等,windows中有powershell,cmd等。因此針對不同的環(huán)境需要使用不同的啟動器。這個參數(shù)就是讓你說明你要生成哪些環(huán)境的啟動器。
- --prompt prompt,在進(jìn)入到虛擬環(huán)境的時候,一般都會在命令提示符的最前面標(biāo)識出虛擬環(huán)境的名稱,便于區(qū)分實(shí)際環(huán)境和虛擬環(huán)境。而這個名稱就是通過這個參數(shù)來配置的。
到此這篇關(guān)于python虛擬環(huán)境模塊venv使用及示例的文章就介紹到這了,更多相關(guān)python虛擬環(huán)境模塊venv內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)簡單的圖書管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)簡單的圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03在Python中居然可以定義兩個同名通參數(shù)的函數(shù)
今天小編就為大家分享一篇在Python中居然可以定義兩個同名通參數(shù)的函數(shù),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01python?中?lxml?的?etree?標(biāo)簽解析
這篇文章主要介紹了python?中l(wèi)xml的etree?標(biāo)簽解析,文章圍繞主題展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)或工作有所幫助2022-04-04用Python的Flask框架結(jié)合MySQL寫一個內(nèi)存監(jiān)控程序
這篇文章主要介紹了用Python的Flask框架結(jié)合MySQL些一個內(nèi)存監(jiān)控程序的例子,并且能將結(jié)果作簡單的圖形化顯示,需要的朋友可以參考下2015-11-11python 邊緣擴(kuò)充方式的實(shí)現(xiàn)示例
本文主要介紹了python 邊緣擴(kuò)充方式的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03基于PyTorch實(shí)現(xiàn)一個簡單的CNN圖像分類器
本文記錄了一個簡單的基于pytorch的圖像多分類器模型構(gòu)造過程,參考自Pytorch官方文檔、磐創(chuàng)團(tuán)隊(duì)的《PyTorch官方教程中文版》以及余霆嵩的《PyTorch 模型訓(xùn)練實(shí)用教程》。從加載數(shù)據(jù)集開始,包括了模型設(shè)計(jì)、訓(xùn)練、測試等過程。2021-05-05python socket模塊創(chuàng)建和使用套接字示例詳解
這篇文章主要為大家介紹了python socket模塊來創(chuàng)建和使用套接字示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Python django框架 web端視頻加密的實(shí)例詳解
這篇文章主要介紹了Python django框架 web端視頻加密,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11