【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>