python 虚拟环境搭建

原文转自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。

01. Linux

如果不知道 easy_install 或��]安�b setuptools,在 Debian/Ubuntu 可以用下列指令安�b:

$ sudo apt-get install python-setuptools

在 Fedora/CentOS/Redhat/openSUSE,�t可以使用:

$ su -# yum install python-setuptools

02. Windows

在 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 �印�

Virtualenv - Virtual Python Environment builder

01. 安�b

Pythonbrew 已整合了 Virtualenv,如果不想�~外安�b一��套件,也可以不要�b Virtualenv。

如果需要安�b,�於命令列模式下�入下列指令:

# easy_install virtualenv

02. 使用方法

I. 建立��M�h境

�於命令列模式下�入下列指令:

$ 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]

II. ��犹��M�h境

�先切�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) ...$
III. 退出��M�h境

�於命令列模式下�入下列指令:

$ deactivate

就可以回到系�y原先的 Python �h境。

IV. 在��M�h境安�b新的 Python 套件

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境。

V. �某淌街兄付ㄊ褂锰��M�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。

03. 延伸套件:Virtualenvwrapper

Virtualenvwrapper 是一�� Virtualenv 的 extension,可使��M�h境的管理�得更容易。

���碚f,Virtualenvwrapper 提供下述功能:

  1. �⑺�有的��M�h境整合在一��目�下。

  2. 管理(新增、移除、�}�u)所有的��M�h境。

  3. 可以使用一��命令切�Q��M�h境。

  4. Tab �a全��M�h境的名字。

  5. 每��操作都提供允�S使用者自�的 hooks。

  6. 可撰��容易分享的 extension plugin 系�y。

I. 安�b

�於命令列模式下�入下列指令:

# easy_install virtualenvwrapper
II. 使用方法

$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

01. 安�b

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

02. ��g前���

因�� 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 所需的套件。

�]:bsddb185linuxaudiodevossaudiodevsunaudiodev 等是按以上方式安�b後,仍��缺少的 module。其中 ossaudiodev(Open Sound System)在�S Ubuntu �l布的 Python 中有提供,列出�碜�大家�⒖肌�

Fedora/CentOS/Redhat/openSUSE �t可以使用 yum-builddep �@��指令。

03. 使用方法

Pythonbrew 的操作不外乎安�b、移除、列出及使用新的 Python 版本,下面是依照初次使用�r所需的指令�序�斫榻B。

I. 列出可安�b的版本

首先我��用 list --know 列出可以安�b的 Python 版本:

$ pythonbrew list --know
II. 安�b新的版本

接著利用 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
III. 清理安�b�r�a生的�n案

下�d的 Python tarball ��放在 ~/.pythonbrew/dists/ 下;而��g�t��在 ~/.pythonbrew/build/ 下�M行。如果想清理�@���目�,可以使用:

$ pythonbrew cleanup
IV. 列出所有已安�b的版本

安�b好之後,可以使用 list 命令列出所有已安�b的 Python 版本:

$ pythonbrew list

後面有打星�的,就是�F在正在使用的 Python 版本。

V. 切�Q已安�b的版本

可以使用 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 了。

VI. 批次在不同版本下�y�

最重要的是,可以用系�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 # 指定特定的版本
VII. 移除已安�b的版本

若想移除已�安�b的 Python,�t可以使用 uninstall

$ pythonbrew uninstall 2.7.2$ pythonbrew uninstall 2.7.2 3.2
VIII. �c Virtualenv 的整合

要注意 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

IX. Buildout

如果有使用 Buildout �@��工具,也可以透�^ Pythonbrew ��绦校�

$ pythonbrew buildout$ pythonbrew buildout -p 2.6.6 # 指定版本
X. 自我更新

最後,Pythonbrew 有�冉ǜ�新自己的指令:

$ pythonbrew update$ pythonbrew update --master$ pythonbrew update --develop

Virtualenv 和 Pythonbrew 就介�B到�@�,如果想�@得更多�Y�,可以多多�⒖妓���的官�W哦。祝大家玩得愉快。



你可能感兴趣的:(python,文章,在家)