1. 程式人生 > >【Python】淺談Python虛擬環境virtualenv

【Python】淺談Python虛擬環境virtualenv

目錄

虛擬環境簡介

虛擬環境提供一個獨立於全域性python環境(庫library和直譯器interpreter)的程式執行空間。這樣一來,可以有效避免python程式之間的相互影響。

比如:程式 A 需要使用某個包的 1.0 版本,而程式 B 需要使用這個包的 2.0 版本,如果兩個程式都使用全域性python環境的話,當我們需要執行這兩個程式,就需要來回解除安裝和安裝對應版本的包了,會造成很多不必要的麻煩,有時候甚至產生一些莫名其妙的錯誤。

又比如: 程式 A 執行在python 2.7 之上,而程式 B 執行在python 3 之上,如果不使用虛擬環境,則兩個程式將無法同時執行。這時,使用虛擬環境分別為這兩個程式配置不同的執行環境,這樣兩個專案就可以互不干擾地同時運行了。

我們可以為每一個python專案或者程式建立一個虛擬環境,這樣所安裝的包和進行的各項配置都只對這個程式生效,而不會影響全域性python環境或者其他專案的虛擬環境。

虛擬環境的安裝和使用

安裝

以Ubuntu 和 Python 3為例,如下安裝:

sudo pip3 install virtualenv

下文中的pip都指pip3。

建立虛擬環境

為一個專案建立虛擬環境:

# 專案所在目錄
cd the_project_fir
# venv是虛擬環境目錄名,可自定義
virtualenv venv

執行上述命令,將會在專案資料夾中建立一個名為venv的資料夾,其包含了Python可執行檔案,以及一份pip庫的拷貝,這樣就可以在虛擬環境中安裝其他的包了。
需要注意的是,虛擬環境的目錄名可以預設,若預設則檔案直接放在當前專案目錄。

指定直譯器

為建立好的虛擬環境指定一個直譯器:

# -p 引數指定python直譯器路徑
virtualenv -p /usr/bin/python3 venv

啟用虛擬環境

需要使用這個虛擬環境之前,需要將其啟用:

source venv/bin/activate

此時,使用pip安裝任何的包都將放置在 venv資料夾中,而不是全域性python環境。

停用虛擬環境

使用下面的命令來停用當前的虛擬環境:

. venv/bin/deactivate

此時將回到系統預設的python環境(全域性python環境)。

刪除虛擬環境

直接刪除對應的資料夾即可,使用rm -rf venv

virtualenvwrapper

我們可以看到,使用virtualenv有些不方便。當配置的虛擬環境數量眾多,需要啟動或停止特定的環境時,都將進入到相應的目錄執行這些啟動或者停止指令碼。過一段時間,你真的能記住哪個虛擬環境在哪個目錄嗎?

安裝

virtualenvwrapper為我們提供了一種解決方案,將所有虛擬環境存放在同一個地方,方便對虛擬環境進行集中管理。

安裝virtualenvwrapper,需要先安裝virtualenv:

# Linux
sudo pip install virtualenvwrapper
# Windows
sudo pip install virtualenvwrapper-win

安裝完成之後,配置環境變數,這裡配置在使用者環境變數中,即在~/.bashrc中寫入:

# virtualenvwrapper存放虛擬環境的目錄
export WORKON_HOME=~/Envs
# virtualenvwrapper會安裝到python的bin目錄下,所以為python安裝目錄下bin/virtualenvwrapper.sh
source /usr/local/bin/virtualenvwrapper.sh

使環境變數生效

source ~/.bashrc

簡單使用

建立虛擬環境,使用mkvirtualenv命令:

# 建立
mkvirtualenv venv
# 通過--python指定直譯器
mkvirtualenv --python=/usr/bin/python3 venv

執行上述命令之後,將在WORKON_HOME指定的目錄建立名為venv的虛擬環境目錄,並指定相應的直譯器。

使用workon檢視當前虛擬環境目錄:

$ workon
venv
venv1

切換到指定的虛擬環境:workon venv21
退出虛擬環境:deactivate
刪除虛擬環境:rmvirtualenv venv1

Anaconda中建立不同環境

如果你的python是通過Anaconda來進行安裝的,那麼可以使用Anaconda自帶的工具來建立不同的環境。

比如,筆者裝的Anaconda3(python3.7),但是安裝tensorflow時發現沒有對應的版本,tensorflow目前最高僅支援python3.6。這個時候怎麼辦呢?解除安裝python3.7轉而安裝python3.6嗎?當然不用!

建立新環境

我們可以使用Anaconda來建立python3.6的環境:

# 使用conda命令建立python3.6環境
conda create -n py36 python=3.6 anaconda

其中,

  • py36是所建立環境的名稱,可以自定義;
  • anaconda 是新環境中也安裝Anaconda帶有的包;
  • python=3.6指定新環境使用的python版本
  • 建立的新環境預設目錄為:~/.conda/envs/

啟用環境

啟用新安裝的環境,使用:

# windows
activate py36
# Linux/macOS
source activate py36

退出環境

當退出當前環境時,使用:

# windows
deactivate
# Linux/macOS
source deactivate

檢視當前環境

一般來說,當前使用的環境將通過在命令列的最前端通過()或者[]顯示,如:

(py36) $

如果沒有顯示,可以使用:

conda info --envs

當前使用的環境將在所有環境中使用*標記。

管理

檢視建立的環境列表:

conda info --envs
# OR
conda env list

刪除環境,使用(慎重):

conda remove -n py36 --all

檢視某個環境中安裝的包:

conda list -n py36
# 已處於啟用狀態
conda list

使用pip為建立的環境安裝包:

# 為環境安裝pip
conda install -n py36 pip
# 啟用環境
source activate py36
# 安裝包
pip <pip_subcommand>