本章我们将学习以下内容。我们的说明会在虚拟机环境上进行,将用来学习的主机称为“Host系统”,并将虚拟机上安装的系统称为“Guest系统”。如果你自己已经准备好了Python的开发环境,跳过本章也没有关系。 Python环境搭建 Mercurial环境搭建 编辑器与方便的开发工具 01.01 Python环境搭建 本节介绍在Ubuntu下开发Python时,需要安装的一些实用的工具包。 本书默认的操作系统为Ubuntu 11.10 (Server版)。该操作系统运行在Oracle VirtualBox虚拟机上。如果你还没有掌握这类环境的搭建方法,可以参考本书的附录A。初学者也请先参照附录,再阅读下面的内容。 01.01.01 安装apt软件包 Ubuntu使用aptitude命令进行操作系统的软件包管理 。首先我们使用下面的命令更新所有的安装包,这些安装包中包括了Python开发所必备的工具 。 apt软件包的更新与升级 $ sudo aptitude -y update $ sudo aptitude -y upgrade $ sudo aptitude -y install build-essential $ sudo aptitude -y install libsqlite3-dev $ sudo aptitude -y install libreadline6-dev $ sudo aptitude -y install libgdbm-dev $ sudo aptitude -y install zlib1g-dev $ sudo aptitude -y install libbz2-dev $ sudo aptitude -y install sqlite3 $ sudo aptitude -y install tk-dev $ sudo aptitude -y install zip 在命令中,-y的作用是告知安装程序:在安装过程中,如果遇到Y或者N的提问,一律以Yes作为默认答案。如果你需要在安装过程中逐个确认,可以将-y去掉,再执行该命令。 build-essential 能够在Ubuntu上编译安装Python所必备的一系列工具链(如gcc、make等)。这些基本的工具链,在Python以及接下来提及的模块和包中,均会作为必要的使用工具,在这里就先行一步一起安装。 接下来我们安装Python相关的包。 Python相关包的安装 # python-dev包的安装 $ sudo aptitude -y install python-dev # Distribute包的安装 $ sudo chmod -R 0775 /usr/local $ sudo chgrp –R bpbook /usr/local $ wget http://python-distribute.org/distribute_setup.py $ sudo python distribute_setup.py Distribute 是支持Python模块构建与导入的工具包,虽然使用apt也能够安装,但通常安装的版本较老,不如将源代码下载下来,进行编译安装较为妥当。关于Distribute包的详细信息可以参考本书第7章。 Python相关包的安装到这里就结束了,最后我们从Ubuntu上确认一下默认安装的Python版本。 Python版本的确认 $ python -V Python 2.7.2+ 输入上面的命令,就可以知道本机现在所安装的Python版本,在Ubuntu 11.10上所安装的版本是Python 2.7.2 +。 01.01.02 easy_install 与pip Python有一个叫做PyPI(Python Package Index,http://pypi.python.org/pypi)的公共资源库,它管理着Python相关的各个功能包 。任何人都可以登录该主页去下载Python相关的包资源。在使用Python开发某些软件时,我们经常会从PyPI下载安装一些必要的功能包。 PyPI的发音为/P I Pi/。 可以想象,同Python和PyPI相类似的组合有这样几个:Perl和CPAN(http://www. cpan.org/)、Ruby和RubyGems(http://rubygems.org/)、PHP和PEAR(http://pear.php.net/)。 从PyPI安装功能包和模块时所使用的命令有:easy_install和pip。下面我们以pip为例进行介绍。 pip命令的安装 $ wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py $ sudo python get-pip.py 在安装完成后,我们来检查一下pip的版本。 pip版本的确认 $ pip --version pip 1.0.2 from /usr/local/lib/python2.7/dist-packages/pip-1.0.2-py2.7.egg (python 2.7) 在作者执笔时,安装的pip版本是pip 1.0.2。在此之后,本书介绍的所有Python相关模块的安装,均以pip命令的形式进行说明。使用pip命令安装的包会存放在/usr/local/python2.7目录下。 在pip编译及安装的过程中,需要使用gcc等编译构建工具。本书默认的是Ubuntu,gcc已经在build-essential中进行了安装。在Windows操作系统中,我们同样需要事先安装Visual Studio 2008免费版本或者MingGW等开源软件,这些都是不收费的。 另外,PyPI还提供了已经编译好的二进制文件egg给用户直接使用,如果用户直接使用egg的话,就无需在操作系统中准备编译器了。egg是以平台相关的形式发布的,多数面向Windows用户。 pip命令没有使用和egg一样的发布形式,如果你想使用egg安装的话,可以使用easy_install命令。有关easy_install和pip的内容我们将在第7章深入地学习。 01.01.03 安装virtualenv 这里的virtualenv是将Python的实际运行环境进行虚拟的工具包。 使用pip install命令安装的功能包,均会存放在/usr/local/lib/python2.7目录下。一旦安装了各种各样的功能包,当我们想让不同的Python应用程序在同一个环境开发时,就会发现自己根本分不清哪个包对应哪个应用程序。virtualenv就是在这样的情况下,对多种不同的Python运行环境进行管理的一个工具。 安装virtualenv $ pip install virtualenv 安装完成后,使用帮助命令查看一下。 安装virtualenv之后,使用help命令 $ virtualenv --help virtualenv的使用方法 接下来将简要介绍一下virtualenv的使用方法。首先用pip提供的pip freeze确认已经安装好的所有包的版本信息。 使用pip freeze确认 $ pip freeze GnuPGInterface==0.3.2 Landscape-Client==11.07.1.1 PAM==0.4.2 Twisted-Core==11.0.0 apt-xapian-index==0.44 chardet==2.0.1 command-not-found==0.2.44 distribute==0.6.24 httplib2==0.7.1 keyring==0.6.2 launchpadlib==1.9.8 lazr.restfulclient==0.11.2 lazr.uri==1.0.2 oauth==1.0.1 pexpect==2.3 pyOpenSSL==0.12 pycrypto==2.3 pycurl==7.19.0 . . . 当输入命令后,就可以看到所有包的清单,这些就是已经安装在/usr/local/ lib/python2.7下的所有包的信息。 接下来,用virtualenv创建出一个供新开发的Python应用程序运行的虚拟环境。先在home目录下建立一个工作目录,在该工作目录中建立一个虚拟的运行环境,下面的命令将完成这些工作。 使用virtualenv建立虚拟运行环境 $ export VIRTUALENV_USE_DISTRIBUTE=true $ mkdir ~/work $ cd ~/work $ virtualenv env 上述命令执行后,会在work目录下建立一个新的env目录,这就是虚拟环境目录。 接下来我们简单说明一下与virtualenv相关的环境变量VIRTUALENV_USE_ DISTRIBUTE。 VIRTUALENV_USE_DISTRIBUTE是向Distribute明示Python运行信息的环境变量 。如果在开发过程中,希望所开发的Python应用程序有“不兼容旧版本的Python”或者“兼容最新版本Python”的要求,最好对该环境变量进行设定。为了不在每次登录都输入这样的命令,我们可以在登录的shell配置中加入下面这条语句。 $ export VIRTUALENV_USE_DISTRIBUTE=true Distribute会根据这个环境变量是否存在,判断虚拟运行环境的配置有效或无效。因此在不适用Distribute的时候,建议用unset命令取消该环境变量。 virtualenv的默认设置是创建虚拟运行环境时不使用/usr/local/lib/python2.7/ site-packages下的模块或者包。相反,当我们需要使用系统下的模块或者包来创建虚拟运行环境的话,可以使用--system-site-packages选项: $ virtualenv --system-site-packages env --system-site-packages是在virtualenv版本1.7之后添加的,包括1.6在内的之前版本都默认使用系统下的模块或者包来创建虚拟运行环境。因此,如果在1.6以前的版本下建立最小虚拟运行环境,可以使用--no-site-packages选项。 $ virtualenv --no-site-packages env 接下来,激活虚拟运行环境。 虚拟运行环境激活 $ source env/bin/activate 当使用了source命令后,虚拟运行环境信息开始生效。我们可以通过查看命令行终端开头是否出现了(env)这样的标志,来判断虚拟运行环境是否彻底被激活。如图1-1所示。 图1-1:virtualenv被激活的状态 当虚拟运行环境被激活后,我们可以再一次使用pip freeze命令来检查安装好的包版本信息。 检查安装好的包版本信息 (env) $ pip freeze distribute==0.6.24 wsgiref==0.1.2 可见,我们已经建立了一个安装最少数量包的Python虚拟运行环境。在这样的环境下,可以再一次使用pip install命令安装开发应用程序需要的包或者模块。如此一来,我们就可以很容易地把握在开发Python应用程序时需要安装的包和模块,从而尽可能减少其他不相干包或者模块给应用程序开发带来的未知影响。 如果需要退出当前的虚拟运行环境,可以使用下面的命令。 退出虚拟运行环境 (env) $ deactivate 当使用virtualenv建立虚拟运行环境来开发应用程序时,千万不要忘了先激活虚拟运行环境。当不再需要该虚拟环境时(这里就是指名为env的虚拟环境),可以直接使用rm等命令将对应的目录删除。 virtualenvwrapper 接着我们介绍一种比virtualenv更容易使用的工具——virtualenvwrapper。virtualenv需要每次使用source命令导入虚拟运行环境信息,这一点非常麻烦,另外开发者还有可能忘记虚拟环境目录的建立位置。virtualenwrappper这一命令行工具就是通过对virtualenv进行二次封装,解决了上述种种问题。让我们先退出虚拟运行环境,使用pip命令安装virtualenvwrapper。 virtualenvwrapper的安装 $ pip install virtualenvwrapper 安装完成后,会在下面的位置生成virtualenvwrapper的shell脚本。 /usr/local/bin/virtualenvwrapper.sh 在使用virtualenvwrapper时,需要配置登录的shell初始化脚本,将virtualenv- wrapper.sh的信息读入当前的shell环境。这里以bash为例,通过对用户目录下的.bashrc配置文件进行如下修改即可。 修改.bashrc if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh fi 准备工作到此结束。由于.bashrc是在登录时执行的,因此如果登出了虚拟机上客户端操作系统,再一次登录之后,运行下面的命令同样可以使用virtualenvwrapper命令。 再次读入.bashrc $ source ~/.bashrc 我们可以输入命令mkvirtualenv,看一下其是否可用。 确认mkvirtualenv的帮助信息 $ mkvirtualenv --help Usage: virtualenv [OPTIONS] DEST_DIR Options: --version show program's version number and exit -h, --help show this help message and exit -v, --verbose Increase verbosity -q, --quiet Decrease verbosity -p PYTHON_EXE, --python=PYTHON_EXE The Python interpreter to use, e.g., --python=python2.5 will use the python2.5 interpreter to create the new environment. The default is the interpreter that virtualenv was installed with (/usr/bin/python) --clear Clear out the non-root install and start from scratch . . . 下面让我们一起看一下该工具的使用。和virtualenv一样,首先需要创建一个虚拟的运行环境。 建立虚拟运行环境 $ mkvirtualenv newenv 当输入上面命令后,也就和virtualenv一样,建立了一个虚拟的运行环境,而且从一开始就处于激活的状态,但我们没有见到newenv目录。 其实virtualenvwrapper对虚拟运行环境环境作了统一管理,根据上面配置的环境变量WORKON_HOME的路径信息,在其中建立了虚拟运行环境目录。在前面我们将WORKON_HOME设定为$HOME/.virtualenvs,让我们用下面的命令对这一目录进行确认,看一下是否有newenv目录生成。 确认虚拟运行环境 $ ls -la $HOME/.virtualenvs 退出虚拟运行环境的命令同样是deactivate,进入虚拟运行环境的命令变为workon。 进入虚拟运行环境 $ workon newenv 当我们想浏览所有既存的虚拟运行环境却忘记了它们的名称时,可以不加任何选项,单单输入workon命令即可。虽然该工具包提供了lsvirtualenv这一专门浏览既存虚拟运行环境的命令,但如果仅仅是浏览环境,不如直接使用workon来得方便。 浏览虚拟运行环境 $ workon 通过mkvirtualenv建立的虚拟运行环境可用下面的命令删除。 删除虚拟运行环境 $ rmvirtualenv newenv virtualenvwrapper的基本操作就介绍到这里。如果你想知道更加详细的信息,可以参考下面的文档:http://www.doughellmann.com/projects/virtualenvwrapper/。 01.01.04 使用不同版本的Python Python的版本现在分成2.X和3.X两个分支并行开发。因此,使用Python开发项目时,同样会遇到使用不同的Python版本进行开发的情况。下面我们就如何在同一个操作系统下,使用不同版本的Python分别开发各自的应用程序这一话题进行阐述。 Ubuntu 11.10上默认安装的Python版本是2.7.2。下面我们来安装以下三个不同版本的Python。 Python 3.2 Python 2.6 Python 2.5 Python 3.X并没有在开发项目中大量使用,我们为了接触一下最新的Python,可以先安装一下。Python在Ubuntu 11.10上的安装方法有很多,具有代表性的安装方法有下面几种: 通过Ubuntu官方的apt工具包安装 通过PPA(Personal Package Archive)的apt工具包安装 通过编译Python源代码安装 通过Ubuntu官方包安装一般来说最可靠也最简单。作者在执笔时,可以通过它来安装Python 3.2和Python 2.6。 通过Ubuntu官方的apt工具包安装 $ sudo aptitude install python3.2 $ sudo aptitude install python2.6 安装完成之后,可以用下面的命令进行确认 。 Python版本的确认 $ python3.2 -V Python 3.2.2 $ python2.6 -V Python 2.6.7 安装的各种各样Python版本均在/usr/bin目录下以带有版本信息的文件名存放。另外,在安装Python 2.5时,输入命令sudo aptitude install python2.5时,会提示无法安装。这是因为在Ubuntu 11.10中,Python 2.5没有被官方apt包放入推荐安装的软件列表中。 遇到Python 2.5这样的老版本软件难以在官方apt资源中找到的情况,我们可以考虑利用PPA(Personal Package Archives)这一由自愿者编译的apt资源站点。由于PPA是自愿者自发支持的资源站点,在使用中往往会有些不兼容的问题存在,所以在使用PPA的资源包时,需要使用者自己承担责任,这一点需要格外慎重。 接下来我们介绍一下从PPA安装Python 2.5的方法。 从PPA(Personal Package Archieves)安装apt工具包 $ sudo aptitude install python-software-properties $ sudo add-apt-repository ppa:fkrull/deadsnakes $ sudo aptitude update $ sudo aptitude install python2.5 类似使用apt工具包安装Python的工具虽然简单,但有时不一定能够安装到最新版本。因此,在Python出现重要更新时,我们最好学会从源代码直接编译安装。 既然apt官方网站没有推荐Python 2.5,我们就从源代码直接编译安装Python 2.5。首先从下面的URL地址下载Python 2.5的最新版本。 http://www.python.org/download/releases/2.5.6 从源代码编译安装Python没有特别难的地方,按照下面的顺序,使用make命令即可(下面的步骤还包括了使用wget命令下载源代码的过程)。 从源代码编译安装Python $ wget http://www.python.org/ftp/python/2.5.6/Python-2.5.6.tgz $ tar -xvzf Python-2.5.6.tgz $ cd Python-2.5.6 $ LDFLAGS="-L/usr/lib/x86_64-linux-gnu" ./configure $ make $ sudo make install 安装完成后,可以确认一下Python 2.5是否安装在了/usr/local/bin目录下。与此同时,我们也会发现默认的Python版本变成了Python 2.5.6。这是因为操作系统在搜索命令时,是按照PATH环境变量的顺序依次进行搜索的,/usr/local/bin下的Python会比/usr/bin下的Python优先搜索到,并作为默认的Python版本。 Python的有些模块和apt安装的某些工具包有着依赖关系,如果没有事先安装这些工具包就使用这些模块的话,会发生import错误。 这时我们就需要将那些工具包重新使用apt安装,尤其是下载源代码编译安装之后,才能继续使用Python某些模块。下面的表格介绍了一些只有安装了apt对应工具包之后才能使用的Python模块。 Python 2.5安装确认 #环境变量PATH搜索顺序从左往右开始。 $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games # /usr/local/bin/python的执行结果。 $ python -V Python 2.5.6 # 使用which命令查看实际的路径。 $ which python /usr/local/bin/python # 指定路径的话,会发现执行的是Python 2.7.2+。 $ /usr/bin/python -V Python 2.7.2+ 使用不同版本Python的方法 最简单的方法是使用virtualenv,建立虚拟运行环境,并在命令行中指出Python的版本信息。 virtualenv执行时指定Python版本 $ mkvirtualenv --python=/usr/bin/python2.7 newenv2 将想要使用的Python的路径信息放入上面命令,就可以指定在虚拟环境中使用的Python版本。 确认虚拟环境的Python版本 (newenv2)$ python -V Python 2.7.2+ 如果无法使用virtualenv,可以使用诸如python2.7这类带有版本信息的Python命令,也可以借助软连接将Python命令重定向到某个特定版本。 另外需要注意的是,如果使用源代码编译安装,/usr/local/bin下面的python和python-config会变成默认的Python。
Python开发实战——01.01 Python环境搭建
书名: Python开发实战
作者: [日] BePROUD股份有限公司
出版社: 人民邮电出版社
译者: 盛荣
出版年: 2014-6
页数: 378
定价: 79.00元
装帧: 平装
ISBN: 9787115320896