郭偉強(qiáng)
Python語法簡潔,零基礎(chǔ)都可以學(xué);python數(shù)據(jù)結(jié)構(gòu)豐富,它提供了列表、元組、字典以及Numpy下的數(shù)組、Pandas等;Python是一款免費(fèi)的編程語言,它提供源碼,可以根據(jù)自己的需要改寫代碼從而實(shí)現(xiàn)自己想要的結(jié)果;Python是一種多范式語言,它支持多種編程風(fēng)格,這使得它的通用性極強(qiáng),現(xiàn)在使用Python是IT行業(yè)的一種趨勢(shì)。但是,作為初學(xué)者,我們還是會(huì)遇到一些問題,本文將詳細(xì)講解并分析出現(xiàn)問題時(shí)我們?cè)撊绾谓鉀Q。
一、配置虛擬環(huán)境
1.虛擬環(huán)境
虛擬環(huán)境是一個(gè)虛擬化、從電腦獨(dú)立出來的環(huán)境。每個(gè)Python虛擬環(huán)境都有一個(gè)獨(dú)立的Python解釋器、一套獨(dú)立的Python標(biāo)準(zhǔn)庫,還有一套獨(dú)立的工具和第三方庫。虛擬環(huán)境雖小,但什么都能做。虛擬環(huán)境之間相互獨(dú)立,互不干擾,當(dāng)我們進(jìn)入某個(gè)虛擬環(huán)境,下載并安裝某個(gè)庫,相應(yīng)的庫也只會(huì)對(duì)這個(gè)虛擬環(huán)境起作用。
2.虛擬環(huán)境的意義
在實(shí)際項(xiàng)目開發(fā)中,我們通常會(huì)根據(jù)自己的需求下載不同的第三方庫,但是每個(gè)項(xiàng)目使用的第三方庫可能不一樣,或使用的版本不一樣,這就需要不斷更新或卸載相應(yīng)的庫。
問題一:項(xiàng)目A需要某個(gè)模塊的1.0版本,項(xiàng)目B需要這個(gè)模塊的2.0版本。如果沒有安裝虛擬環(huán)境,使用這兩個(gè)項(xiàng)目時(shí),就需要來回卸載安裝,這樣很容易給項(xiàng)目帶來錯(cuò)誤。
問題二:以前開發(fā)的項(xiàng)目需要在Python2.7環(huán)境下運(yùn)行,而現(xiàn)在的項(xiàng)目需在Python3環(huán)境中運(yùn)行,如果不使用虛擬環(huán)境,這兩個(gè)項(xiàng)目有可能無法同時(shí)使用,使用Python3則之前的項(xiàng)目無法運(yùn)行,反之則新項(xiàng)目運(yùn)行有麻煩。如果分別為這兩個(gè)項(xiàng)目配置不同的虛擬環(huán)境,就可以很好地解決這個(gè)問題。
問題三:項(xiàng)目1需要pymysql模塊、requests模塊,而項(xiàng)目2需要numpy模塊與pandas模塊。
問題四:當(dāng)所有的項(xiàng)目都使用同一個(gè)Python運(yùn)行環(huán)境時(shí),也會(huì)產(chǎn)生第三方庫的版本沖突(見圖1)。
二、確定虛擬環(huán)境的路徑
1.Python運(yùn)行環(huán)境(對(duì)應(yīng)于Python的安裝目錄)
安裝目錄下有Python解釋器、Python標(biāo)準(zhǔn)庫、工具(pip、easy-install等),在site-packages目錄中,安裝的所有第三方庫及其版本,例如pygame(1.9.6)、requests(2.22.0)、pymysql(0.81)、numpy(1.18.1)等。
2.虛擬環(huán)境的Python運(yùn)行環(huán)境(根據(jù)Python的安裝目錄虛擬出來)
假設(shè)有3個(gè)項(xiàng)目,都要用到mysql數(shù)據(jù)庫,但是他們的版本不一樣,這時(shí)候我們就可以在各個(gè)項(xiàng)目的目錄下創(chuàng)建各自的虛擬環(huán)境,每個(gè)虛擬環(huán)境下都有單獨(dú)的Python解釋器、Python標(biāo)準(zhǔn)庫、工具(pip、easy-install等)。因此,我們只需要根據(jù)項(xiàng)目需求安裝不同版本的pymysql就可以實(shí)現(xiàn)。
3.確定當(dāng)前Python解釋器對(duì)應(yīng)的Python安裝目錄
在windows系統(tǒng)下,當(dāng)前Python解釋器的完整路徑是where python的執(zhí)行結(jié)果中的第一行,對(duì)應(yīng)的Python安裝目錄是完整路徑中\python.exe前面的部分。
三、安裝virtualenv
1.virtualenv
(1)virtual的意思是“虛擬的”。
(2)env是“environment”的縮寫,意思是“環(huán)境”。
(3)virtualenv即“虛擬環(huán)境”。
2.通過工具pip下載安裝
在windows下,打開命令提示符窗口,輸入命令pip install virtualenv就可以安裝。Python使用pip方法安裝第三方庫時(shí),默認(rèn)情況下,需要從https://pypi.org/資源庫中下載,由于安裝源在國外,可能下載速度慢,甚至無法下載,這時(shí),我們可以通過國內(nèi)源安裝相應(yīng)的庫,有以下兩種方式。
(1)臨時(shí)使用國內(nèi)源安裝。
pip install virtualenv -i http://pypi.douban.com/simple/
pip install -i http://pypi.douban.com/simple/ virtualenv
如果提示不可信,則將網(wǎng)站設(shè)置為受信任。
pip install virtualenv -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com virtualenv
#此參數(shù)“--trusted-host”表示信任,如果上一個(gè)提示不受信任,就使用這個(gè)。
(2)永久使用國內(nèi)源安裝。
①新建pip配置文件夾,直接在user用戶目錄中創(chuàng)建一個(gè)名為pip的文件夾(即%HOMEPATH%\pip)。
②接著在pip文件夾中創(chuàng)建一個(gè)名為pip的文本文件(后綴名由“.txt”改為“ini”),這里以豆瓣網(wǎng)為例,文件內(nèi)容如下:
[global]
index-url = https:// pypi.douban.com/simple
[install]
trusted-host = https:// pypi.douban.com
# trusted-host 此參數(shù)是為避免麻煩,否則使用時(shí)可能會(huì)提示不受信任。
(3)安裝好后,輸入virtualenv--version命令測(cè)試安裝是否成功。
(4)常用的國內(nèi)源有:清華大學(xué),https://pypi.tuna.tsinghua.edu.cn/simple;阿里云,http://mirrors.aliyun.com/pypi/simple/;豆瓣,http://pypi.douban.com/simple/。
四、使用virtualenv
1.創(chuàng)建虛擬環(huán)境
(1)在創(chuàng)建虛擬環(huán)境之前,首先要確定好被創(chuàng)建的虛擬環(huán)境所在的目錄,然后在命令提示符窗口或終端窗口中切換到該目錄。
(2)創(chuàng)建虛擬環(huán)境的語法是virtualenv 虛擬環(huán)境的名稱。如果存在多個(gè)Python解釋器,可以選擇指定一個(gè)Python解釋器(比如“virtualenv –p /uar/bin/python3.7 MyVirEnv,-p后為指定的Python解釋器),沒有指定則由系統(tǒng)默認(rèn)的解釋器來搭建。另外,如果在創(chuàng)建虛擬環(huán)境時(shí)繼承系統(tǒng)第三方庫,可以使用命令virtualenv --system-site-packages MyVirEnv,參數(shù)--system-site-packages 指定創(chuàng)建虛擬環(huán)境時(shí)繼承系統(tǒng)第三方庫。
虛擬環(huán)境建好之后,會(huì)在項(xiàng)目目錄下面自動(dòng)創(chuàng)建一個(gè)名為MyVirEnv的虛擬環(huán)境目錄。它是一個(gè)獨(dú)立的Python運(yùn)行環(huán)境,包含Python可執(zhí)行文件以及pip庫,可以直接安裝第三方庫。不過已經(jīng)安裝到系統(tǒng)Python環(huán)境中的第三方庫不會(huì)被復(fù)制過來,這樣,我們就可以得到一個(gè)不帶任何第三方庫的“干凈”的Python運(yùn)行環(huán)境。
2.激活虛擬環(huán)境
首先要切換到虛擬環(huán)境MyVirEnv目錄下的Scripts,然后執(zhí)行activate,最后用pip list 查看當(dāng)前虛擬環(huán)境下所安裝的第三方庫。
3.應(yīng)用虛擬環(huán)境
激活虛擬環(huán)境后,當(dāng)前的Python解釋器就是該虛擬環(huán)境中的Python解釋器;當(dāng)前的pip、pip3和easy_install等工具就是該虛擬環(huán)境中的相應(yīng)工具;當(dāng)前的第三方庫就是該虛擬環(huán)境中的第三方庫。
4.刪除虛擬環(huán)境
在某個(gè)虛擬環(huán)境中完成操作后,如果想退出該虛擬環(huán)境,就需要反激活該虛擬環(huán)境。操作方法:當(dāng)前目錄可以是任意一個(gè)目錄,執(zhí)行deactivate命令,當(dāng)前路徑的最前面的小括號(hào)以及小括號(hào)中虛擬環(huán)境的名稱會(huì)自動(dòng)消失。另外,當(dāng)前的Python解釋器就是Python的安裝目錄中的Python解釋器,當(dāng)前的pip、pip3和easy_install等工具就是Python的安裝目錄中的相應(yīng)工具,當(dāng)前的第三方庫就是Python的安裝目錄中的第三方庫。具體結(jié)構(gòu)如圖2所示。
五、不同系統(tǒng)之間的項(xiàng)目轉(zhuǎn)移
問題一:在電腦A上的虛擬環(huán)境中正常運(yùn)行的某個(gè)Python項(xiàng)目,如何保證它在電腦B上也可以正常運(yùn)行呢?
問題二:如果兩臺(tái)電腦的操作系統(tǒng)不一樣,那么電腦A中的虛擬環(huán)境在電腦B中是無法使用的,如果項(xiàng)目使用了虛擬環(huán)境中的很多第三方庫,就會(huì)導(dǎo)致虛擬環(huán)境的體積較大,不方便拷貝。
解決方法:在電腦A上,對(duì)于項(xiàng)目使用的虛擬環(huán)境中的所有第三方庫,形成一個(gè)名稱和版本的列表,存放在某個(gè)文件中;把電腦A上的項(xiàng)目和文件拷貝到電腦B上;在電腦B上新建一個(gè)虛擬環(huán)境,并根據(jù)文件把項(xiàng)目使用的第三方庫都下載和安裝到虛擬環(huán)境中。
我們可以使用pip freeze>requirements.txt將依賴包的信息進(jìn)行保存,使用這條命令后,目錄下會(huì)多出一個(gè)requirements.txt文件。當(dāng)我們將項(xiàng)目目錄轉(zhuǎn)移至目的系統(tǒng)后,重建并激活虛擬環(huán)境(Python版本需一致),在項(xiàng)目目錄下執(zhí)行命令pip install -r requirements.txt即可獲得與之前開發(fā)時(shí)相同的依賴包和相同的環(huán)境。
六、在PyCharm中使用virtualenv
創(chuàng)建一個(gè)純Python項(xiàng)目,選中單選按鈕New environment using,默認(rèn)是通過Virtualenv創(chuàng)建虛擬環(huán)境。在PyCharm中使用virtualenv比較方便,不需要手動(dòng)激活虛擬環(huán)境,關(guān)聯(lián)虛擬環(huán)境后可以直接在虛擬環(huán)境中進(jìn)行操作。
責(zé)任編輯 陳春陽