virtualenv is a tool to create isolated Python environments.
virtualenv通過創(chuàng)建獨(dú)立Python開發(fā)環(huán)境的工具, 來解決依賴、版本以及間接權(quán)限
問題. 比如一個(gè)項(xiàng)目依賴Django1.3 而當(dāng)前全局開發(fā)環(huán)境為Django1.7, 版本跨度過大, 導(dǎo)致不兼容使項(xiàng)目無法正在運(yùn)行, 使用virtualenv可以解決這些問題.
virtualenv創(chuàng)建一個(gè)擁有自己安裝目錄的環(huán)境, 這個(gè)環(huán)境不與其他虛擬環(huán)境共享庫, 能夠方便的管理python版本和管理python庫
1. 安裝Virtualenv
使用pip安裝Virtualenv
更多可以查看官方安裝指南
$ pip install virtualenv
//或者由于權(quán)限問題使用sudo臨時(shí)提升權(quán)限
$ sudo pip install virtualenv
2. virtualenv基本使用
現(xiàn)在開始使用virtualenv管理python環(huán)境
? Test git:(master) ? virtualenv ENV #創(chuàng)建一個(gè)名為ENV的目錄, 并且安裝了ENV/bin/python, 創(chuàng)建了lib,include,bin目錄,安裝了pip
New python executable in
Installing setuptools, pip...done.
? Test git:(master) ? cd ENV
? ENV git:(master) ? ll
drwxr-xr-x 14 andrew_liu staff 476 12 8 08:49 bin
drwxr-xr-x 3 andrew_liu staff 102 12 8 08:49 include
drwxr-xr-x 3 andrew_liu staff 102 12 8 08:49 lib
- lib,所有安裝的python庫都會(huì)放在這個(gè)目錄中的lib/pythonx.x/site-packages/下
- bin,bin/python是在當(dāng)前環(huán)境是使用的python解釋器
如果在命令行中運(yùn)行virtualenv --system-site-packages ENV, 會(huì)繼承/usr/lib/python2.7/site-packages下的所有庫, 最新版本virtualenv把把訪問全局site-packages作為默認(rèn)行為
default behavior.
2.1. 激活virtualenv
#ENV目錄下使用如下命令
? ENV git:(master) ? source ./bin/activate #激活當(dāng)前virtualenv
(ENV)? ENV git:(master) ? #注意終端發(fā)生了變化
#使用pip查看當(dāng)前庫
(ENV)? ENV git:(master) ? pip list
pip (1.5.6)
setuptools (3.6)
wsgiref (0.1.2) #發(fā)現(xiàn)在只有這三個(gè)
pip freeze #顯示所有依賴
pip freeze > requirement.txt #生成requirement.txt文件
pip install -r requirement.txt #根據(jù)requirement.txt生成相同的環(huán)境
2.2. 關(guān)閉virtualenv
使用下面命令
$ deactivate
2.3. 指定python版本
可以使用-p PYTHON_EXE選項(xiàng)在創(chuàng)建虛擬環(huán)境的時(shí)候指定python版本
#創(chuàng)建python2.7虛擬環(huán)境
? Test git:(master) ? virtualenv -p /usr/bin/python2.7 ENV2.7
Running virtualenv with interpreter /usr/bin/python2.7
New python executable in ENV2.7/bin/python
Installing setuptools, pip...done.
#創(chuàng)建python3.4虛擬環(huán)境
? Test git:(master) ? virtualenv -p /usr/local/bin/python3.4 ENV3.4
Running virtualenv with interpreter /usr/local/bin/python3.4
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.4'
New python executable in ENV3.4/bin/python3.4
Also creating executable in ENV3.4/bin/python
Installing setuptools, pip...done.
到此已經(jīng)可以解決python版本沖突問題和python庫不同版本的問題
3. 其他
3.1. 生成可打包環(huán)境
某些特殊需求下,可能沒有網(wǎng)絡(luò), 我們期望直接打包一個(gè)ENV, 可以解壓后直接使用, 這時(shí)候可以使用virtualenv -relocatable指令將ENV修改為可更改位置的ENV
#對(duì)當(dāng)前已經(jīng)創(chuàng)建的虛擬環(huán)境更改為可遷移
? ENV3.4 git:(master) ? virtualenv --relocatable ./
Making script ./bin/easy_install relative
Making script ./bin/easy_install-3.4 relative
Making script ./bin/pip relative
Making script ./bin/pip3 relative
Making script ./bin/pip3.4 relative
3.2. 獲得幫助
$ virtualenv -h
當(dāng)前的ENV都被修改為相對(duì)路徑, 可以打包當(dāng)前目錄, 上傳到其他位置使用
這并不能使虛擬環(huán)境跨平臺(tái)使用