我們從事的項目很可能有許多需要安裝的依賴項。這些依賴關系促進了項目中的許多任務。然而尤其是在處理多個項目時,我們需要很小心。
就像任何其他技術一樣,軟件包或編程語言也在不斷改進。因此正在推出新的版本。
不同的項目可能需要不同版本的包或軟件。例如,我們可能有一個項目需要Python/ target=_blank class=infotextkey>Python2.7,另一個項目需要Python3.6。隨著項目和依賴項數(shù)量的增加,很難跟蹤和處理這些差異。
克服這個問題的一種方法是使用虛擬環(huán)境。它們可以被視為軟件包的邊界框。我們可以在虛擬環(huán)境中開發(fā)一個項目,并安裝特定于該項目的所有依賴項。我們在虛擬環(huán)境中擁有的東西不受機器全局范圍變化的影響。
Python有許多虛擬環(huán)境工具,如pipenv、virtualenv、venv等。在本文中,我們將討論一些使用virtualenv和pipenv的示例,以熟悉虛擬環(huán)境的概念及其工作方式。
讓我們從virtualenv開始。首先使用python包安裝程序(pip)從終端安裝它。
$ pip install virtualenv
創(chuàng)建一個示例項目文件作為工作目錄。
$ mkdir demoproject
$ cd demoproject
現(xiàn)在在demoproject目錄中。我們將使用以下命令創(chuàng)建一個虛擬環(huán)境。
$ virtualenv venv_demo
它被創(chuàng)造出來了。我們可以運行l(wèi)s命令來查看當前工作目錄中的文件。
$ ls
venv_demo
下一步是激活虛擬環(huán)境。
$ source venv_demo/bin/activate
一旦虛擬環(huán)境被激活,其名稱將顯示在終端中,如下所示:
現(xiàn)在可以安裝軟件包了。
$ python -m pip install pandas
我們現(xiàn)在在虛擬環(huán)境中安裝了pandas。freeze命令顯示已安裝軟件包的列表。
$ python -m pip freeze
numpy==1.19.4
pandas==1.1.5
python-dateutil==2.8.1
pytz==2020.5
six==1.15.0
NumPy也被安裝了,因為它是pandas的依賴。pandas的安裝版本是1.1.5。我們可以在安裝軟件包時指定所需的版本。
$ python -m pip install pandas==1.0.5
如果你只想檢查特定軟件包的已安裝版本,請將freeze命令與grep一起使用:
$ pip freeze | grep pandas
pandas==1.0.5
我們還可以安裝保存在文本文件中的幾個軟件包。這比一個接一個地安裝依賴項要好,尤其是當有多個依賴項時。
$ python -m pip install -r requirements.txt
為了退出虛擬環(huán)境,我們使用deactivate命令。
$ deactivate
我們將發(fā)現(xiàn)的下一個工具是pipenv,它可以使用pip安裝:
$ pip install pipenv
使用pipenv創(chuàng)建一個新的虛擬環(huán)境。
$ pipenv install --python=/usr/bin/python3.6
Pipenv允許在創(chuàng)建虛擬環(huán)境時安裝依賴項。例如,我可以在上面的命令末尾添加pandas,這樣就可以創(chuàng)建安裝了pandas的虛擬環(huán)境。
運行shell命令來激活虛擬環(huán)境。
$ pipenv shell
我們現(xiàn)在處于虛擬環(huán)境中。也給這個安裝pandas吧。
$ pipenv install pandas
graph命令顯示已安裝軟件包的詳細概述。
$ pipenv graph
pandas==1.1.5
- numpy [required: >=1.15.4, installed: 1.19.4]
- python-dateutil [required: >=2.7.3, installed: 2.8.1]
- six [required: >=1.5, installed: 1.15.0]
- pytz [required: >=2017.2, installed: 2020.5]
我們可以使用uninstall命令卸載虛擬環(huán)境中的特定包或所有包。
$ pipenv uninstall pandas
以下命令將卸載所有包。
$ pipenv uninstall -all
鍵入“exit”命令退出虛擬環(huán)境。
結論
虛擬環(huán)境是同時管理多個項目的好工具。有許多軟件包和庫可以很快更新。因此,試圖手動更新效率不高。
本文介紹的內容可以看作是Python虛擬環(huán)境的實用介紹。當然,在理論和實踐上還有很多東西要學。
virtualenv(https://virtualenv.pypa.io/en/latest/)和pipenv(https://github.com/pypa/pipenv)的官方文檔提供了關于這些工具的更詳細的概述。