當用?Python?開發(fā)軟件時,一個基本的方法是在你的機器上安裝?Python,通過終端安裝所有需要的庫,在一個?.py?文件或筆記本中編寫所有的代碼,并在終端運行你的?Python?程序。
這對于簡單的?Python?腳本項目來說效果很好。但是在復雜的軟件開發(fā)項目中,比如構建一個?Python?庫、一個?API?或者軟件開發(fā)工具包,往往你要處理多個文件、多個包和依賴關系。因此,你將需要為該特定項目隔離你的?Python?開發(fā)環(huán)境,即創(chuàng)建一個虛擬環(huán)境。
【解析】“虛擬環(huán)境是一個?
Python?環(huán)境,這樣安裝在其中的?Python?解釋器、庫和腳本就與安裝在其它虛擬環(huán)境中的、以及(默認)安裝在“系統(tǒng)”上的?Python(也就是作為操作系統(tǒng)的一部分安裝的庫)中的任何庫隔離。
Python?虛擬環(huán)境是一種用于隔離不同?Python?項目所需依賴的機制。它允許在同一臺機器上同時管理多個?Python?項目,每個項目都可以有自己獨立的?Python?版本和依賴庫,互不干擾。
Python?提供了多種虛擬環(huán)境工具,其中包括venv、virtualenv和conda。本文將詳細介紹這三種工具的特點、使用方法以及在實際工作中的示例代碼。
venv?是?Python?官方提供的虛擬環(huán)境工具,從?Python 3.3?版本開始引入,成為了Python?的標準庫,用于創(chuàng)建和管理虛擬環(huán)境,如果使用的是?Python 3.3?以下的版本,可以考慮使用?virtualenv?來創(chuàng)建和管理虛擬環(huán)境。venv?的使用方法非常簡單,可以通過以下命令創(chuàng)建和管理虛擬環(huán)境:
python3 -m venv myenv
上述命令將在當前目錄下創(chuàng)建名為"myenv"的虛擬環(huán)境。虛擬環(huán)境創(chuàng)建完成后,可以通過激活命令進入虛擬環(huán)境:
在Linux/macOS上:
source myenv/bin/activate
在Windows上:
myenv\Scripts\activate.bat
在創(chuàng)建虛擬環(huán)境后,需要激活虛擬環(huán)境才能使用它。激活虛擬環(huán)境會將該虛擬環(huán)境的?Python?解釋器添加到系統(tǒng)的環(huán)境變量中,使得在命令行中運行?python?命令時,默認使用虛擬環(huán)境中的解釋器。
激活虛擬環(huán)境后,將看到命令行提示符前面有(myenv)字樣,表示已經(jīng)進入了虛擬環(huán)境。
激活虛擬環(huán)境后,可以使用?pip?命令安裝項目所需的依賴包。
當完成了當前項目的開發(fā)或者需要切換到其他項目時,可以使用以下命令退出虛擬環(huán)境:
(myenv) [root@localhost pythonproject]# deactivate
[root@localhost pythonproject]#
此時,命令行提示符將恢復為正常狀態(tài)。
virtualenv?是一個第三方庫,可以在?Python 2?和?Python 3?中使用。它相比于venv?提供了更多的功能和選項,如果使用的是?Python 3.3?以下的版本,可以考慮使用virtualenv?來創(chuàng)建和管理虛擬環(huán)境。使用?virtualenv?創(chuàng)建虛擬環(huán)境的命令如下:
virtualenv myenv
如果提示:command not found...,可使用?yum install?安裝?python3-virtualenv包以使系統(tǒng)安裝該命令。
與?venv?類似,虛擬環(huán)境創(chuàng)建后,可以使用以下命令激活虛擬環(huán)境:
在Linux/macOS上:
source myenv/bin/activate
在Windows上:
myenv\Scripts\activate.bat
激活虛擬環(huán)境后,可以使用?pip?命令安裝項目依賴。
當完成了當前項目的開發(fā)或者需要切換到其他項目時,可以使用以下命令退出虛擬環(huán)境:
(myenv) [root@localhost pythonproject]# deactivate
[root@localhost pythonproject]#
此時,命令行提示符將恢復為正常狀態(tài)。
conda?是一個流行的?Python?虛擬環(huán)境和包管理工具,它是?Anaconda?發(fā)行版的一部分。conda?不僅可以創(chuàng)建虛擬環(huán)境,還可以管理不同版本的?Python?解釋器和第三方包。使用conda?創(chuàng)建虛擬環(huán)境的命令如下:
conda create --name myenv
激活虛擬環(huán)境后,可以使用以下命令進入虛擬環(huán)境:
在Linux/macOS上:
source activate myenv
在Windows上:
activate myenv
激活虛擬環(huán)境后,可以使用?conda?命令安裝項目所需的包。
當完成了當前項目的開發(fā)或者需要切換到其他項目時,可以使用以下命令退出虛擬環(huán)境:
(myenv) [root@localhost pythonproject]# conda deactivate
[root@localhost pythonproject]#
此時,命令行提示符將恢復為正常狀態(tài)。
前面,我們已經(jīng)激活了虛擬環(huán)境,現(xiàn)在我們?nèi)绾未_認項目實際上已經(jīng)與主機?Python?隔離了呢?我們可以做幾件事。
首先,我們通過在激活的虛擬環(huán)境中運行下面的代碼來檢查虛擬環(huán)境中安裝的軟件包列表。你會注意到只有兩個包?--pip?和?setuptools,它們是新的虛擬環(huán)境中默認的基本包。
pip list
接下來你可以在一個沒有激活虛擬環(huán)境的新終端中運行上面的相同代碼。你會注意到在你的主機?Python?中多了很多庫,這些庫是你在過去已經(jīng)安裝的。主機上面的這些庫并不是你的?Python?虛擬環(huán)境的一部分。
要安裝新的庫,你可以很容易地只用?pip?安裝這些庫。虛擬環(huán)境將使用它自己的?pip,所以你不需要使用?pip3。
在安裝完所需的庫后,你可以通過使用?pip list?來查看所有安裝的庫,或者你可以通過運行下面的代碼來生成一個列出所有項目依賴的文本文件:
pip freeze > requirements.txt
你可以把這個?requirements.txt?文件命名為你想要的任何名字。
為什么需求文件對你的項目很重要?考慮到你把你的項目打包在一個 tar.gz?文件中(沒有?env?文件夾),然后你和開發(fā)者朋友們分享。
要重新創(chuàng)建你的開發(fā)環(huán)境,你的朋友只需要按照上面的步驟來激活一個新的虛擬環(huán)境。
他們不必逐一安裝每個依賴項,而只需運行下面的代碼,在他們自己的項目副本中安裝你的所有依賴項:
pip install -r requirements.txt
注意,通常不建議分享你的?env?文件夾,它應該很容易被復制到任何新環(huán)境中。
通常你的?env?目錄會被包含在一個?.gitignore?文件中(當使用?GitHub?這樣的版本控制平臺時),以確保環(huán)境文件不會被推送到項目庫中。
通過使用?Python?虛擬環(huán)境,可以輕松地管理不同項目的依賴關系,避免了不同項目之間的沖突,并且可以保持每個項目的獨立性。