一、virtualenv 虛擬環境安裝
?? virtualenv 工具可以用來在 Linux 操作系統中創建一個虛擬的Python環境。這個環境是獨立的、隔離的,擁有自己的環境安裝目錄(而不是把所有的第三方包等都安裝在 /usr/lib/python3.4/site-packages 目錄(Python3.4的默認Linux安裝目錄)下)。
?? 它可以用來解決Python項目開發和運行過程中的依賴項和版本問題,而不必和其他項目的Python環境以及全局的Python環境發生沖突。
1、安裝 virtualenv
建議使用 pip
工具安裝 virtualenv 包:
$ pip install virtualenv
2、創建虛擬環境
安裝完成后,可以使用 virtualenv
命令創建放置虛擬環境的目錄:
$ virtualenv [OPTIONS] [虛擬環境名稱]
創建原理:
?? 在目錄 ENV 里會初始化虛擬環境的相關目錄和文件,包括 Python 語言本身的環境以及 pip 等相關程序都會在這個目錄里創建(拷貝)一份新的。
ENV/lib
和 ENV/include
目錄中包含了虛擬環境ENV使用的庫文件。在虛擬環境中安裝的第三方包會安裝在 ENV/lib/python3.4/site-packages
目錄下。
ENV/bin
目錄里面放置了可執行文件,在里面有新安裝的Python 包中的可執行程序,包括pip等相關工具。
OPTIONS:
--no-site-packages 參數:
?? 默認情況下,虛擬環境會依賴系統環境中的 sit package,就是說系統中已經安裝好的第三方 package 也會安裝在虛擬環境中,如果不想依賴這些 package,那么可以加上 --no-site-packages
參數建立虛擬環境。
$ virtualenv --no-site-packages [虛擬環境名稱]
--system-site-packages 參數:
?? 如果你使用 --system-site-packages
參數創建虛擬環境,你創建的虛擬環境會繼承 /usr/local/python34/lib/python3.4/site-packages 。
$ virtualenv --system-site-packages ENV
--extra-search-dir 參數:
?? 如果你使用 --extra-search-dir
參數創建虛擬環境,這允許你提供自己的 setuptools 版本,而不是使用虛擬環境中嵌入的版本。
$ virtualenv --extra-search-dir=/path/to/distributions ENV
/path/to/distributions 參數:
?? 指定一個包含 setuptools 以及 pip、wheels 等的目錄。virtualenv 命令會在指定的目錄中,尋找 wheels,但是會使用 pip 的標準的算法來選擇安裝的 wheel。
除了指定的目錄,搜索順序還包含:
1、相對于virtualenv.py 的 virtualenv_support 目錄;
2、virtualenv.py 所在的目錄;
3、當前目錄;
--version 顯示軟件的版本號:
# virtualenv --version
-h, --help 顯示幫助信息:
# virtualenv -h
-p PYTHON_EXE, --python=PYTHON_EXE 指定生成的虛擬環境使用的Python解釋器:
?? 默認的使用的是安裝 virtualenv 的 Python 解釋器
# virtualenv -p /usr/bin/python2.6 ENV
--no-setuptools 在新建的虛擬環境中不安裝工具包:
# virtualenv --no-setuptools ENV
--no-pip 在新建的虛擬環境中不安裝pip:
# virtualenv --no-pip ENV
--no-wheel 在新建的虛擬環境中不安裝 wheel:
# virtualenv --no-wheel ENV
--extra-search-dir=DIR 指定安裝新的虛擬環境時尋找工具包、pip等的目錄路徑,這個參數可以用來多次指定:
# virtualenv --extra-search-dir=/usr/local/python34/bin/ ENV
--prompt=PROMPT 可以為創建的虛擬環境指定提示前綴:
# virtualenv --prompt="測試" test
3、啟動環境
在新創建的虛擬環境目錄中,有一個啟動腳本 ENV/bin/activate
,直接使用 source
命令來啟動我們新創建的虛擬環境。
$ source ENV/bin/activate
?? 這條命令修改了當前用戶的環境變量 $PATH
,將我們新建的虛擬環境目錄 ENV/bin/
作為第一個元素添加到了 $PATH 中。因為在Linux系統中輸入命令時,命令可執行文件的搜索路徑是根據 $PATH 中配置的路徑的先后順序來的,所以接下來你執行的所有命令都將是 ENV/bin/
中的命令(如果此目錄中存在這個命令的話),新安裝的模塊都只會安裝到該目錄(ENV)中去。
active 腳本也會修改當前用戶的命令行顯示,在頭部會顯示出當前使用的虛擬環境。
4、退出和刪除環境
如果要退出當前虛擬環境,使用 deactivate
命令:
$ deactivate
如果需要刪除我們創建的虛擬環境,只需要退出,并刪除創建的文件夾即可:
$ deactivate
$ rm -r /path/to/ENV
二、安裝 virtualenvwrapper 擴展包
Virtaulenvwrapper 是 virtualenv 的擴展包,可以把新創建的環境記錄下來,不需要每次啟動虛擬環境時都執行一遍 source 命令,可以更方便的管理虛擬環境。
它可以實現:
1、將所有虛擬環境整合在一個目錄下
2、管理(新增,刪除,復制)虛擬環境
3、快速切換虛擬環境
1、安裝 virtualenvwrapper :
1.1 建議適用 pip 安裝:
$ pip install virtualenvwrapper
1.2 進入 用戶主目錄,打開 .bashrc 文件,添加如下代碼:
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh
WORKON_HOME:
?? 告訴 virtualenvwrapper 在哪里放置你的虛擬環境,默認是在 $HOME/.virtualenvs
目錄下。如果這個目錄不存在,virtualenvwrapper 運行的時候會自動創建它。
PROJECT_HOME :
?? 告訴virtualenvwrapper在哪里存放你的項目的工作目錄。
1.3 然后執行 source 命令,使剛添加的代碼生效:
$ source .bashrc
2、使用 virtualenvwrapper
虛擬環境相關操作:
workon: 列出虛擬環境列表
mkvirtualenv [虛擬環境名稱]: 新建虛擬環境
workon [虛擬環境名稱]: 切換虛擬環境
rmvirtualenv [虛擬環境名稱]: 刪除虛擬環境
deactivate: 離開虛擬環境
2.1 使用 workon 命令,列出可以使用的虛擬環境:
$ workon
2.2 使用 mkvirtualenv 命令,創建新的虛擬環境:
mkvirtualenv [-a project_path] [-i package] [-r requirements_file] [virtualenv options] ENVNAME
除了-a , -i, -r, -h 所有的命令中的選項都會直接傳遞給virtualenv,新的虛擬環境在初始化后會自動激活(也就是進入該虛擬環境)。
$ mkvirtualenv ENV
-a 選項:可以將一個現有的項目關聯到新建的虛擬環境
$ mkvirtualenv -a phone/ phone
-i 選項:可以在虛擬環境創建后安裝一個或多個包
-r選項:可以指定一個列出了要安裝那些包的文件,這個參數相當于pip 的 -r 參數。
2.3 使用 mktmpenv 命令自動生成一個唯一的名稱:
mktmpenv [(-c|--cd)|(-n|--no-cd)] [VIRTUALENV_OPTIONS]
$ mktmpenv
2.4 lsvirtualenv 命令詳細的列出我們創建的虛擬環境
$ lsvirtualenv
2.5 showvirtualenv 顯示某個虛擬環境的細節描述
$ showvirtualenv cms
2.6 rmvirtualenv 刪除 WORKON_HOME 里的一個虛擬環境
在你刪除虛擬環境之前,必須先離開這個虛擬環境。
$ rmvirtualenv ENVNAME
2.7 allvirtualenv 在WORKON_HOME里的所有虛擬環境中執行一條命令:
allvirtualenv command with arguments
$ allvirtualenv pip install -U pip
2.8 workon 切換一個虛擬環境
$ workon environment_name
如果后面沒有給出虛擬環境的名稱,則會列出可以使用的虛擬環境
$ workon
2.9 deactivate 退出當前使用的虛擬環境
$ deactivate