三、总结

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

originally created by shuliang under CC BY-NC-ND 3.0 license

一、引言 学习编程,好比练功,总得先有个环境,搭台子是必须的。为了照顾初学者,很多时候台子已经搭好了,比如用Python,IDE、Terminal下直接敲命令运行就可以了,但有些时候还是需要自己动手配置,今天的tornado即是如此。好在Mac比较人性化,Python、easy_install、pip都是开箱即用,安装tornado也就是一条命令就搞定的事。但直接在系统环境中安装不利于多版本和睦相处,不和谐,因此秉承“不折腾不舒服”之精神,创建tornado与系统隔离的环境是必要的,这样在练习的时候可以很方便的为每个案例设置不同的运行环境。

为Python创建虚拟环境,一般大家推荐virtualenv,但zc.buildout同样优秀甚至更强大,现在我们就来试试这两种方法。

安装环境:MacOS Mavericks (10.9.1)

二、创建虚拟环境 1.方法一:virtualenv virtualenv能创建多个Python运行环境,各环境相互独立,彼此不影响,官方介绍见这。

1.1 安装 virtualenv可以用pip或者easy_install安装(输入的命令用红色显示,以便区分,下同):

1localhost:~ leo$pip install virtualenv2Requirement already satisfied (use --upgrade to upgrade): virtualenvin/usr/local/lib/python2.7/site-packages/virtualenv-1.10.1-py2.7.egg3Cleaning up...4localhost:~ leo$

1.2 新建虚拟环境 安装完virtualenv后,就可以用virtualenv命令来创建一个”helloworld“的虚拟环境(实质是一个文件夹,我是将其放到~/python/下的,以下操作都是在~/python这个目录里面进行的,如果在~/目录下操作也是可行的,请注意)。

1localhost:python leo$virtualenv --no-site-packages helloworld2New python executableinhelloworld/bin/python3Installing Setuptools..............................................................................................................................................................................................................................done.4Installing Pip.....................................................................................................................................................................................................................................................................................................................................done.5localhost:python leo$

默认情况下,virtualenv会引用系统Python中site-packages中的库,我们设置--no-site-packages参数是为了取消对系统Python库的引用,创建完全隔离的Python环境。这时候virtualenv已经为我们创建了bin, include, lib三个文件夹:

1localhost:python leo$ls helloworld/2bin include lib3localhost:python leo$

我们先来看一下lib中目前已有的库文件:

1localhost:python leo$ls helloworld/lib/python2.7/site-packages/2_markerlib pkg_resources.py3easy_install.py pkg_resources.pyc4easy_install.pyc setuptools5pip setuptools-0.9.8-py2.7.egg-info6pip-1.4.1-py2.7.egg-info7localhost:python leo$

可以看到目前库文件中还没有包含tornado库,下面我们就来安装tornado库。

1.3 虚拟环境中安装tornado 同样,我们可以用pip或者easy_install来安装tornado库,但这次不是用系统层面的pip或easy_install工具,而是用virtualenv设置好的pip或easy_install。我们看一下helloworld/bin目录:

1localhost:python leo$ls helloworld/bin2activate easy_install python3activate.csh easy_install-2.7python24activate.fish pip python2.75activate_this.py pip-2.76localhost:python leo$

可以看到bin目录下已经有了virtualenv为我们准备好的pip和easy_install工具,接下来安装tornado库可以说是毫不费力(当然得有网才行):

localhost:python leo$helloworld/bin/easy_install tornadoPRocessing tornado

Writing/Users/leo/python/tornado/setup.cfg

Running setup.py-q bdist_egg --dist-dir/Users/leo/python/tornado/egg-dist-tmp-Q67shc

zip_safe flag not set; analyzing archive contents...

tornado.autoreload: module references __file__

tornado.simple_httpclient: module references __file__

tornado.testing: module references __file__

tornado.test.httpserver_test: module references __file__

tornado.test.iostream_test: module references __file__

tornado.test.locale_test: module references __file__

tornado.test.options_test: module references __file__

tornado.test.template_test: module references __file__

tornado.test.web_test: module references __file__

Adding tornado3.3.dev1 to easy-install.pthfileInstalled/Users/leo/python/helloworld/lib/python2.7/site-packages/tornado-3.3.dev1-py2.7-macosx-10.8-intel.egg

此处省略n字

Installed/Users/leo/python/helloworld/lib/python2.7/site-packages/backports.ssl_match_hostname-3.4.0.2-py2.7.egg

Finished processing dependenciesfortornado==3.3.dev1

localhost:python leo$

现在,与系统隔离的tornado已经安装完毕了,我们来检查一下lib目录:

1localhost:python leo$ls helloworld/lib/python2.7/site-packages/2_markerlib pip-1.4.1-py2.7.egg-info3backports.ssl_match_hostname-3.4.0.2-py2.7.egg pkg_resources.py4easy-install.pth pkg_resources.pyc5easy_install.py setuptools6easy_install.pyc setuptools-0.9.8-py2.7.egg-info7pip tornado-3.3.dev1-py2.7-macosx-10.8-intel.egg8localhost:python leo$

可以看到tornado库已经安装好了。

1.4 运行helloworld 接下来,我们选用tornado官方demos中的helloworld来做例子,运行第一个tornado实例。将demos中的helloworld文件夹拷贝到~/python/helloworld目录中:

1localhost:python leo$ls helloworld/2bin helloworld include lib3localhost:python leo$

然后,重点的一步,激活虚拟环境,可以看到Terminal提示变成了(helloworld)localhost了:

1localhost:python leo$source helloworld/bin/activate2(helloworld)localhost:python leo$

接着运行helloworld.py:

1(helloworld)localhost:python leo$helloworld/helloworld/helloworld.py

允许联网:

最后在浏览器地址栏中输入:http://127.0.0.1:8888就可以看到helloworld.py成功运行:

如果要退出虚拟环境,Control+z之后deactivate即可。

1(helloworld)localhost:python leo$deactivate2localhost:python leo$

2.方法二:buildout zc.buildout同样也能创建独立的Python环境,而且生成的配置文件bootstrap.py能再次生成同样的虚拟运行环境,可谓部署之利器。官方介绍见这。

2.1 安装zc.buildout zc.buildout的安装依赖于setuptools,Mac里面已经自带了,所以安装比较简单。但buildout的安装方式不止一种,大致可以分为以下几种:

下载bootstrap.py文件生成buildout配置环境;安装到系统Python库中,这样可以在Terminal里面直接调用生成新工程;与virtualenv搭配,在virtualenv的虚拟环境中安装; 官网有详细的介绍,这里不赘述,见这。我们这里将buildout直接安装到系统Python库里,安装很简单,pip install zc.buildout即可:

1localhost:python leo$pip install zc.buildout2Requirement already satisfied (use --upgrade to upgrade): zc.buildoutin/usr/local/lib/python2.7/site-packages/zc.buildout-2.2.1-py2.7.egg3Requirement already satisfied (use --upgrade to upgrade): setuptools>=0.7in/usr/local/lib/python2.7/site-packages/setuptools-2.1-py2.7.egg (from zc.buildout)4Cleaning up...5localhost:python leo$

2.2 生成buildout文件 先新建一个"tornadoBlog"文件夹(之后操作在tornadoBlog文件夹中进行):

1localhost:python leo$mkdir tornadoBlog2localhost:python leo$ls tornadoBlog3localhost:python leo$

我们选用tornado官方demos中的blog来做例子。将demos中的blog文件夹拷贝到~/python/tornadoBlog目录中:

1localhost:python leo$ls tornadoBlog2bin buildout.cfg eggs setup.py3blogdevelop-eggs parts4localhost:python leo$

切换到~python/tornadoBlog目录中,运行"buildout init"命令:

1localhost:python leo$cd tornadoBlog/2localhost:tornadoBlog leo$buildout init3Creating'/Users/leo/python/tornadoBlog/buildout.cfg'.4Creating directory'/Users/leo/python/tornadoBlog/bin'.5Creating directory'/Users/leo/python/tornadoBlog/parts'.6Creating directory'/Users/leo/python/tornadoBlog/eggs'.7Creating directory'/Users/leo/python/tornadoBlog/develop-eggs'.8Generated script'/Users/leo/python/tornadoBlog/bin/buildout'.9localhost:tornadoBlog leo$

可以看到buildout新建了bin, develop-eggs, eggs, parts四个文件夹和一个buildout.cfg配置文件。各个文件的说明参看这里,或者官网。

2.3 配置buildout.cfg buildout相比virtualenv麻烦的地方就在配置buildout.cfg,我们先用Vim打开看一下:

1[buildout]2parts =3~

我们修改一下:

[buildout]

parts=blog

develop=.

eggs=tornado

markdown

torndbMySQL-python

[blog]

recipe=zc.recipe.egg

#interpreter代表新生成解释器的名字,可以是其他名称

interpreter=blogPy

eggs= ${buildout:eggs}

因为blog的例子需要用到的Python库除了tornado之外,还需要Markdown, torndb和MySQL-python,所以我们在eggs一栏中加入这三个模块,以便buildout为我们安装。当然我们还需要安装MySQL,如果之前安装了Homebrew,用"brew install mysql"就可以安装MySQL了,如果没有,参看这里。推荐使用Homebrew安装。

保存并退出Vim,在blog目录下新建setup.py文件:

1localhost:tornadoBlog leo$ls2bin buildout.cfg develop-eggs eggs parts3localhost:tornadoBlog leo$touch setup.py4localhost:tornadoBlog leo$ls5bin buildout.cfg develop-eggs eggs parts setup.py6localhost:tornadoBlog leo$

修改setup.py:

from setuptools import setup, find_packages

setup(

name='tornado_blog',

package_dir= {'':'blog'},

install_requires= ['setuptools','markdown','torndb','MySQL-python'],

)

2.4 运行buildout,生成配置环境 现在一切就绪,马上可以调用buildout,生成配置环境了:

1localhost:tornadoBlog leo$bin/buildout2Develop:'/Users/leo/python/tornadoBlog/.'3Getting distributionfor'zc.recipe.egg>=2.0.0a3'.4Got zc.recipe.egg2.0.1.5Installing blog.6Getting distributionfor'tornado'.78此处省略n字910Got MySQL-python1.2.5.11Getting distributionfor'backports.ssl-match-hostname'.12zip_safe flag not set; analyzing archive contents...13backports.__init__: module references __path__14Got backports.ssl-match-hostname3.4.0.2.15Generated script'/Users/leo/python/tornadoBlog/bin/markdown_py'.16Generated interpreter'/Users/leo/python/tornadoBlog/bin/blogPy'.17localhost:tornadoBlog leo$

可以看到tornado、markdown等已经配置好(在eggs目录中可以看到新下载的eggs),在bin目录下还有新生成的blogPy解释器脚本,我们配置一下MySQL,接下来就可以用blogPy环境来运行博客了。

2.5 运行Blog 在tornado官方demos中的blog例子中有README文件,里面描述了如何连接MySQL。设置好数据库之后,用blogPy虚拟环境中,即可运行blog.py:

1localhost:tornadoBlog leo$bin/blogPy blog/blog.py

用Google账号登陆后就可以添加博客了,效果图如下:

三、总结 通过两个小例子我们练习了用virtualenv和zc.buildout来创建与系统Python库隔离的tornado虚拟环境,总体来讲virtualenv配置要简单一些,安装好之后只需创建隔离的文件夹,然后用pip或easy_install工具下载需要的库运行即可。相比而言,zc.buildout上手要难一些,配置起来也麻烦一点,但有着”配置一次,多处运行“的强大优势,适合大型项目和生产环境中部署,可以说自动化程度更高。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航