Python本身有很多個(gè)版本,第三方的Python包又有很多可用的版本,所以經(jīng)常會(huì)遇到下面的問題:
運(yùn)行不同的Python程序,需要使用不同版本的Python(2.x或3.x).
在同一中Python版本中,可能需要用到不同版本的第三方包,例如:Django 1.6或者Django 1.7
對(duì)于上面的問題,已經(jīng)有很多現(xiàn)成的個(gè)工具可以解決。根據(jù)解決上面問題的方法,這些工具大概可以分為兩類:
Python 版本環(huán)境切換工具
特定Python版本虛擬環(huán)境切換工具
現(xiàn)有工具及介紹
下面看看現(xiàn)在流行的虛擬環(huán)境工具,以及簡(jiǎn)單的介紹。
Python 版本環(huán)境切換工具
Python版本環(huán)境切換工具的作用就是讓多個(gè)不同版本的Python可以在系統(tǒng)上共存。并且提供簡(jiǎn)單的命令來支持不同Python版本之間的切換。
工具
介紹
pyenv
目前最流行的 python版本環(huán)境切換工具,但是不支持Windows
pywin
Windows 上pyenv 的替代品,但是功能相對(duì)pyenv比較少
py.exe
Python 3.3 版本以后Windows系統(tǒng)自帶的啟動(dòng)工具(Python Launcher for Windows),可以直接在命令行中使用
特定Python版本虛擬環(huán)境切換工具
簡(jiǎn)單的說,虛擬環(huán)境切換工具就是可以根據(jù)當(dāng)前使用的Python版本環(huán)境來創(chuàng)建多個(gè)虛擬的Python環(huán)境。這些虛擬的環(huán)境之間相互獨(dú)立,可以安裝各個(gè)環(huán)境所需的Python包。
工具
介紹
virtualenv
目前最流行的 python 虛擬環(huán)境配置工具
virtualenvwrapper
使用shell開發(fā),是對(duì)virtualenv的一個(gè)封裝,簡(jiǎn)化了virtualenv命令的使用,并且進(jìn)行了一些功能擴(kuò)展
virtualenvwrapper-win
使用Windows batch shell開發(fā)的virtualenvwrapper
venv
Python 3.3 版本以后自帶的虛擬環(huán)境工具,僅支持 python 3.3 和以后版本
由于我現(xiàn)在大部分時(shí)間工作在Windows環(huán)境,下面就主要介紹一下pywin和virtualenvwrapper-win的使用。
pywin
現(xiàn)在看看Windows上Python版本環(huán)境切換工具
pywin。
對(duì)于pywin的工作原理就可以簡(jiǎn)單的理解為,通過pywin提供的命令可以簡(jiǎn)單的以設(shè)置環(huán)境變量的方式?jīng)Q定優(yōu)先使用特定版本的Python。
安裝
對(duì)于pywin,我們可以使用源碼、easy_install和pip三種方式進(jìn)行安裝,關(guān)于這些安裝方式的關(guān)系,請(qǐng)參考
前一篇文章。
下面通過pip來安裝pywin:
常用命令
安裝完成之后就看看pywin的常用命令。
"pyassoc"和"pywin genlaunchers"是兩個(gè)配置相關(guān)的命令。我本機(jī)安裝了2.7和3.4兩個(gè)版本的Python,默認(rèn)環(huán)境變量指向2.7,配置完成后就會(huì)就會(huì)在2.7目錄中生成本機(jī)安裝所有Python版本的launcher。
配置完成之后,就可以通過pywin進(jìn)行不同版本之間的Python切換了。
1. 打開環(huán)境變量PAHT中第一個(gè)Python版本環(huán)境
C:\Users\tianw1>pywinPython 2.7.7 (default, Jun 1 2014, 14:17:13) [MSC v.1500 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> exit()
2. 打開Python 3.4
C:\Users\tianw1>pywin -3.4Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> exit()
3. 將Python 3.4設(shè)置為默認(rèn)的Python執(zhí)行環(huán)境,根據(jù)輸出也可以看出,其實(shí)就是將Python 3.4目錄放在環(huán)境變量PATH的前面位置
C:\Users\tianw1>pywin setdefault 3.4 Setting default python for active session to: 3.4 C:\Python34;C:\Python34\Scripts -- now at front of PATH# 由于Python 3.4中沒有安裝pywin,所以會(huì)報(bào)錯(cuò)C:\Users\tianw1>pywin'pywin' is not recognized as an internal or external command,operable program or batch file.C:\Users\tianw1>pythonPython 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> exit()
4. 即使上面通過pywin將默認(rèn)Python版本環(huán)境設(shè)為3.4,但是由于文件的查找還是先本地,然后環(huán)境變量PATH。所以,下面方式使用的還是2.7版本,同時(shí)也可以再通過pywin將2.7設(shè)置為默認(rèn)Python版本環(huán)境。
C:\>cd Python27C:\Python27>pythonPython 2.7.7 (default, Jun 1 2014, 14:17:13) [MSC v.1500 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> exit()C:\Python27>pywin setdefault 2.7 Setting default python for active session to: 2.7 C:\Python27;C:\Python27\Scripts -- now at front of PATHC:\Python27>
virtualenvwrapper-win
在Windows環(huán)境中使用"virtualenvwrapper-win"還是比較方便的。
安裝
同樣使用pip進(jìn)行安裝:
pip install virtualenvwrapper-win
常用命令
安裝完成之后,就可以直接使用"virtualenvwrapper-win"提供的命令來創(chuàng)建虛擬環(huán)境了。
1. 新建虛擬環(huán)境:mkvirtualenv env_name
C:\Users\tianw1>mkvirtualenv py27_dev1New python executable in py27_dev1\Scripts\python.exeInstalling setuptools, pip, wheel...done.(py27_dev1) C:\Users\tianw1>pip listpip (7.1.2)setuptools (18.2)wheel (0.24.0)
注意,默認(rèn)情況虛擬環(huán)境不會(huì)自通引用原始Python環(huán)境中的軟件包,但是可以通過"--system-site-packages"參數(shù)來使虛擬環(huán)境引用原始Python環(huán)境中的軟件包。
C:\Users\tianw1>mkvirtualenv --system-site-packages py27_dev2New python executable in py27_dev2\Scripts\python.exeInstalling setuptools, pip, wheel...done.(py27_dev2) C:\Users\tianw1>pip listbackports.ssl-match-hostname (3.4.0.2)certifi (2015.4.28)click (4.1)flask (0.11.dev0)gevent (1.0.2)greenlet (0.4.7)itsdangerous (0.24)jinja2 (2.8)pip (7.1.2)pywin (0.3.1)setuptools (18.2)smmap (0.9.0)tornado (4.2.1)virtualenv (13.1.2)virtualenvwrapper-win (1.2.1)Werkzeug (0.10.4)wheel (0.24.0)
2. 離開虛擬環(huán)境:deactivate
(py27_dev1) C:\Users\tianw1>deactivateC:\Users\tianw1>
3. 列出虛擬環(huán)境列表:workon 或lsvirtualenv
C:\Users\tianw1>workonPass a name to activate one of the following virtualenvs:==============================================================================py27_dev1py27_dev2C:\Users\tianw1>lsvirtualenvdir /b /ad "C:\Users\tianw1\Envs"==============================================================================py27_dev1py27_dev2C:\Users\tianw1>
4. 刪除虛擬環(huán)境:rmvirtualenv env_name
總結(jié)
本文介紹了Python 版本環(huán)境切換工具和虛擬環(huán)境切換工具,通過這些工具可以方便系統(tǒng)中不同版本的Python切換,同時(shí)也方便了創(chuàng)建獨(dú)立的Python虛擬環(huán)境。
使用Python虛擬環(huán)境的另一個(gè)好處是可以方便的進(jìn)行環(huán)境部署,對(duì)于每個(gè)虛擬環(huán)境,都可以通過下面的命令很方便的進(jìn)行環(huán)境部署:
pip freeze > requirements.txt將包依賴信息保存在requirements.txt文件
pip install -r requirements.txt會(huì)自動(dòng)從網(wǎng)上下載并安裝所有包