原文转自http://www.openfoundry.org/tw/tech-column/8516-pythons-virtual-environment-and-multi-version-programming-tools-virtualenv-and-pythonbrew
Virtualenv 和 Pythonbrew 都是可以��造��M(��立)Python �h境的工具,只是��M(��立)�说牟煌�。
Virtualenv 可以隔�x函��煨枨蟛煌�的�0福��它��不��互相影�。在建立�K��犹��M�h境後,透�^ pip
安�b的套件��被放在��M�h境中,�0妇涂梢�碛幸����立的�h境。
�而言之,Virtualenv 可以�湍阕龅剑�
在�]有�嘞薜那�r下安�b新套件
不同�0缚梢允褂貌煌�版本的相同套件
套件版本升��r不��影�其他�0�
Pythonbrew �t可以在家目�中安�b多�� Python,�K迅速地切�Q版本;也可以在指定的 Python 版本下批次�y�你的 Python 程式;另外更整合了 Virtualenv。
�@篇文章����介�B�@���工具,�你在多人�_�l及多版本�_�l的�h境中更得心��手。
Python 的 package 通常��上�髦� PyPI,有很多工具都可以�� PyPI 安�b package。下面��使用 easy_install
�@��工具(由 setuptools 提供)�戆惭b Virtualenv 和 Pythonbrew。
如果不知道 easy_install
或��]安�b setuptools,在 Debian/Ubuntu 可以用下列指令安�b:
$ sudo apt-get install python-setuptools
在 Fedora/CentOS/Redhat/openSUSE,�t可以使用:
$ su -# yum install python-setuptools
在 Windows �t可以�� setuptools 的�面找到 *.exe
格式的安�b�n案。安�b完後,可以在 C:\PythonX.Y\Scripts\
(X.Y 是 Python 的版本)下找到 easy_install.exe
。�得把�@��路�椒胚M Windows �h境��抵械� PATH。
接著就可以�p�安�b任何在 PyPI 的 Python Package �印�
Pythonbrew 已整合了 Virtualenv,如果不想�~外安�b一��套件,也可以不要�b Virtualenv。
如果需要安�b,�於命令列模式下�入下列指令:
# easy_install virtualenv
�於命令列模式下�入下列指令:
$ virtualenv [指定��M�h境的名�Q]
例如下列指令��建立名�� "ENV" 的��M�h境:
$ virtualenv ENV
�A�O在建立��M�h境�r,��依�系�y�h境中的 site packages,如果想完全不依�系�y的 packages,可以加上��� --no-site-packages
�斫�立��M�h境:
$ virtualenv --no-site-packages [指定��M�h境的名�Q]
�先切�Q��前目�至建立的��M�h境中。前例中,建立名�Q�� "ENV",�t:
$ cd ENV
接著,��犹��M�h境:
$ source bin/activate
在 Windows �h境中�t改用:
> \path\to\env\Scripts\activate.bat
然後就可以注意到,在 shell 提示字元的最前面多了��M�h境的名�Q提示:
(ENV) ...$
�於命令列模式下�入下列指令:
$ deactivate
就可以回到系�y原先的 Python �h境。
Virtualenv 在安�b�r��附�� pip
�@�� Python 的套件安�b工具,����M�h境被���r,由它安�b的 package ��出�F在��M�h境的�Y料�A中,用法是:
(ENV)...$ pip install [套件名�Q]
如果系�y也有安�b pip
,�特�e注意是否已������M�h境,否�t套件��被安�b到系�y中,而非��M�h境�e。
如果想要避免 pip
在�]有�M入��M�h境�r被使用,可以在 ~/.bashrc
加上:
export PIP_REQUIRE_VIRTUALENV=true
要求 pip
一定要在��M�h境中�绦小�
也可以用下面的�O定,�系�y的 pip
自�邮褂��又械奶��M�h境。
export PIP_RESPECT_VIRTUALENV=true
避免意外�⑻准�安�b至系�y�h境。
�o法�� Shell ��犹��M�h境的情�r,像是使用 mod_python 或 mod_wsgi,�@�r可以在 Python 的程式中加上:
activate_this = '/path/to/env/bin/activate_this.py'execfile(activate_this, dict(__file__=activate_this))
�硎褂冒惭b在��M�h境中的 packages。
Virtualenvwrapper 是一�� Virtualenv 的 extension,可使��M�h境的管理�得更容易。
���碚f,Virtualenvwrapper 提供下述功能:
�⑺�有的��M�h境整合在一��目�下。
管理(新增、移除、�}�u)所有的��M�h境。
可以使用一��命令切�Q��M�h境。
Tab �a全��M�h境的名字。
每��操作都提供允�S使用者自�的 hooks。
可撰��容易分享的 extension plugin 系�y。
�於命令列模式下�入下列指令:
# easy_install virtualenvwrapper
於 $WORKON_HOME
�u作��M�h境:
$ mkvirtualenv [-i package] [-r requirements_file] [virtualenv options] ENVNAME
列出所有的��M�h境:
$ lsvirtualenv [-b] [-l] [-h]
-b
是�短模式;-l
是��模式(�A�O);-h
是印出 help �Y�。
移除��M�h境:
$ rmvirtualenv ENVNAME
�}�u��M�h境:
$ cpvirtualenv ENVNAME TARGETENVNAME
��犹��M�h境:
$ workon [environment_name]
如果只�入 workon
,�t��列出所有的��M�h境。
�x�_��M�h境一�邮鞘褂� deactivate
。
可以使用下面的�O定�砀嬖V pip
Virtualenv 的路�健�
export PIP_VIRTUALENV_BASE=$WORKON_HOME
Virtualenvwrapper 的功能��然不只如此,更多功能可以�⒖� Virtualenvwrapper 的官方文件。
Pythonbrew 是��比�^新的�0福��m然比�^新,�s非常完整。它也有整合上面介�B的 Virtualenv。可以用�似 Virtualenvwrapper 的方式�聿僮� Virtualenv。
安�b方式�c Virtualenv 一�樱�只要�入下面的指令就可以了:
# easy_install $ pythonbrew
Pythonbrew 官方有推�]的安�b方式,但�@篇教�W�榍笠恢滦裕�就不�~外介�B了,可以�⒖� pythonbrew/README.rst。
��於 Windows 的使用者,很可惜地,Pythonbrew ��r�]有支援 Windows 的��� (#6: Windows Support? - Issues - utahta/pythonbrew - GitHub)。所以 Windows ��r��]�k法使用 Pythonbrew �印�
��^ easy_install
的安�b後,�需要在 shell �绦校�
$ pythonbrew_install
才��把初始的�O定�n和�Y料�A配置�M你的家目�。接著要修改 ~/.bashrc
的配置:
$ echo "source ~/.pythonbrew/etc/bashrc" >> ~/.bashrc
�@�泳退惆惭b完全�印�
Pythonbrew 使用 curl
�碜ト≠Y料,如果你的系�y�]有,��得安�b。Ubuntu 上可以使用�@行指令:
$ sudo apt-get install curl
因�� Pythonbrew �袢∠螺d tarball,�K��g、安�b的方法,所以我��要先�橄到y��浜镁��g Python 所需的套件。
也因�樵S多 Linux �l行版都已打包 Python,所以我��可以偷�幸稽c,用已�打包好的套件�斫�Q��g所需的相依性。在 Ubuntu/Debian 上,可以透�^:
$ sudo apt-get build-dep python2.7
�戆惭b所有��g Python 2.7 所需的套件。�m然已�能�虬惭b得相��完整,但�是缺少了 gdbm
�@�� module,如果需要的�,可以透�^:
$ sudo apt-get build-dep python-gdbm
�戆惭b��g gdbm
所需的套件。
�]:bsddb185
、linuxaudiodev
、ossaudiodev
、sunaudiodev
等是按以上方式安�b後,仍��缺少的 module。其中 ossaudiodev
(Open Sound System)在�S Ubuntu �l布的 Python 中有提供,列出�碜�大家�⒖肌�
Fedora/CentOS/Redhat/openSUSE �t可以使用 yum-builddep
�@��指令。
Pythonbrew 的操作不外乎安�b、移除、列出及使用新的 Python 版本,下面是依照初次使用�r所需的指令�序�斫榻B。
首先我��用 list --know
列出可以安�b的 Python 版本:
$ pythonbrew list --know
接著利用 install VERSION
�硐螺d�K��g Python 到本�C,除了接 Python 的版本��以外,也可以接 Python 的 tarball 路�交蚓W址�戆惭b;也能�{整��g Python 的�x�。下面是一些例子:
$ pythonbrew install 2.7.2$ pythonbrew install --verbose 2.7.2$ pythonbrew install --force 2.7.2$ pythonbrew install --no-test 2.7.2$ pythonbrew install --configure="CC=gcc_4.1" 2.7.2$ pythonbrew install --no-setuptools 2.7.2$ pythonbrew install http://www.python.org/ftp/python/2.7/Python-2.7.2.tgz$ pythonbrew install /path/to/Python-2.7.2.tgz$ pythonbrew install /path/to/Python-2.7.2$ pythonbrew install 2.7.2 3.2
下�d的 Python tarball ��放在 ~/.pythonbrew/dists/
下;而��g�t��在 ~/.pythonbrew/build/
下�M行。如果想清理�@���目�,可以使用:
$ pythonbrew cleanup
安�b好之後,可以使用 list
命令列出所有已安�b的 Python 版本:
$ pythonbrew list
後面有打星�的,就是�F在正在使用的 Python 版本。
可以使用 switch
�砬�Q�A�O的 Python 版本:
$ pythonbrew switch VERSION
如果只想在��前的 shell 下切�Q,可以使用 use
:
$ pythonbrew use VERSION
要切�Q回�A�O的�h境�r,使用 off
:
$ pythonbrew off
就��返回系�y�h境的 Python 了。
最重要的是,可以用系�y�人�有安�b�^的 Python 版本,或指定的 Python 版本��y�自己的程式!
$ pythonbrew py test.py # 使用所有有安�b的版本$ pythonbrew py -v test.py # ���出$ pythonbrew py -p 2.7.2 -p 3.2 test.py # 指定特定的版本
若想移除已�安�b的 Python,�t可以使用 uninstall
:
$ pythonbrew uninstall 2.7.2$ pythonbrew uninstall 2.7.2 3.2
要注意 Pythonbrew 中所提供的 Virtualenv,是基於 Pythonbrew 中所安�b的 Python(置於 ~/.pythonbrew/venvs/Python-VERSION/
下)。在不使用 Pythonbrew 的情�r下,�o法使用附�凫� Pythonbrew 的 venv
功能。
Pythonbrew 提供了和 Virtualenvwrapper �似的功能,只是�]有像 Virtualenvwrapper 那�N完整的 plugin 系�y。所有在 Pythonbrew 中的 Virtualenv 指令都以 venv
作�榈谝��副命令。
$ pythonbrew venv create [指定��M�h境的名�Q]$ pythonbrew venv list$ pythonbrew venv use [指定��M�h境的名�Q]$ pythonbrew venv delete [指定��M�h境的名�Q]
�x�_��M�h境一�邮鞘褂� deactivate
。
如果有使用 Buildout �@��工具,也可以透�^ Pythonbrew ��绦校�
$ pythonbrew buildout$ pythonbrew buildout -p 2.6.6 # 指定版本
最後,Pythonbrew 有�冉ǜ�新自己的指令:
$ pythonbrew update$ pythonbrew update --master$ pythonbrew update --develop
Virtualenv 和 Pythonbrew 就介�B到�@�,如果想�@得更多�Y�,可以多多�⒖妓���的官�W哦。祝大家玩得愉快。