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安装(输入的命令用红色显示,以便区分,下同):

1 localhost:~ leo$ pip install virtualenv
2 Requirement already satisfied (use --upgrade to upgrade): virtualenv in /usr/local/lib/python2.7/site-packages/virtualenv-1.10.1-py2.7.egg
3 Cleaning up...
4 localhost:~ leo$

1.2 新建虚拟环境

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

1 localhost:python leo$ virtualenv --no-site-packages helloworld
2 New python executable in helloworld/bin/python
3 Installing Setuptools..............................................................................................................................................................................................................................done.
4 Installing Pip.....................................................................................................................................................................................................................................................................................................................................done.
5 localhost:python leo$

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

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

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

1 localhost:python leo$ ls helloworld/lib/python2.7/site-packages/
2 _markerlib pkg_resources.py
3 easy_install.py pkg_resources.pyc
4 easy_install.pyc setuptools
5 pip setuptools-0.9.8-py2.7.egg-info
6 pip-1.4.1-py2.7.egg-info
7 localhost:python leo$

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

1.3 虚拟环境中安装tornado

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

1 localhost:python leo$ ls helloworld/bin
2 activate easy_install python
3 activate.csh easy_install-2.7 python2
4 activate.fish pip python2.7
5 activate_this.py pip-2.7
6 localhost:python leo$

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

localhost:python leo$ helloworld/bin/easy_install tornado
Processing 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 tornado 3.3.dev1 to easy-install.pth file Installed /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 dependencies for tornado==3.3.dev1
localhost:python leo$

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

1 localhost:python leo$ ls helloworld/lib/python2.7/site-packages/
2 _markerlib pip-1.4.1-py2.7.egg-info
3 backports.ssl_match_hostname-3.4.0.2-py2.7.egg pkg_resources.py
4 easy-install.pth pkg_resources.pyc
5 easy_install.py setuptools
6 easy_install.pyc setuptools-0.9.8-py2.7.egg-info
7 pip tornado-3.3.dev1-py2.7-macosx-10.8-intel.egg
8 localhost:python leo$

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

1.4 运行helloworld

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

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

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

1 localhost:python leo$ source helloworld/bin/activate
2 (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$ deactivate
2 localhost: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即可:

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

2.2 生成buildout文件

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

1 localhost:python leo$ mkdir tornadoBlog
2 localhost:python leo$ ls tornadoBlog
3 localhost:python leo$

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

1 localhost:python leo$ ls tornadoBlog
2 bin buildout.cfg eggs setup.py
3 blog develop-eggs parts
4 localhost:python leo$

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

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

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

2.3 配置buildout.cfg

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

1 [buildout]
2 parts =
3 ~

我们修改一下:

[buildout]
parts = blog
develop = .
eggs = tornado
markdown
torndb
MySQL-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文件:

1 localhost:tornadoBlog leo$ ls
2 bin buildout.cfg develop-eggs eggs parts
3 localhost:tornadoBlog leo$ touch setup.py
4 localhost:tornadoBlog leo$ ls
5 bin buildout.cfg develop-eggs eggs parts setup.py
6 localhost: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,生成配置环境了:

 1 localhost:tornadoBlog leo$ bin/buildout
2 Develop: '/Users/leo/python/tornadoBlog/.'
3 Getting distribution for 'zc.recipe.egg>=2.0.0a3'.
4 Got zc.recipe.egg 2.0.1.
5 Installing blog.
6 Getting distribution for 'tornado'.
7
8 此处省略n字
9
10 Got MySQL-python 1.2.5.
11 Getting distribution for 'backports.ssl-match-hostname'.
12 zip_safe flag not set; analyzing archive contents...
13 backports.__init__: module references __path__
14 Got backports.ssl-match-hostname 3.4.0.2.
15 Generated script '/Users/leo/python/tornadoBlog/bin/markdown_py'.
16 Generated interpreter '/Users/leo/python/tornadoBlog/bin/blogPy'.
17 localhost:tornadoBlog leo$

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

2.5 运行Blog

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

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

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

三、总结

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

使用virtualenv或zc.buildout创建Python-tornado分离环境的更多相关文章

  1. 用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境

    作为主流开发语言, 用python 开发的程序越来越多. 方便的是大多linux系统里面都默认集成了python, 开发可以随时随地开始. 但有时候这也成为了一个短板, 比如说有时候我们需要开发和调试 ...

  2. 用pyenv和virtualenv搭建单机多版本python虚拟开发环境

    作为主流开发语言, 用python 开发的程序越来越多. 方便的是大多linux系统里面都默认集成了python, 开发可以随时随地开始. 但有时候这也成为了一个短板, 比如说有时候我们需要开发和调试 ...

  3. CentOS下用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境

    安装 系统环境:CentOS 6.5 安装依赖 yum -y install gcc gcc-c++ make git patch openssl-devel zlib-devel readline- ...

  4. 【转】使用virtualenv在ubuntu上搭建python 3开发环境

    ubuntu 13.04默认的python版本是2.7的,想在其上做python3的开发会遇到问题.比如要使用pip安装软件包时,默认安装的就是python2的包.如果想安装python3的包,就需要 ...

  5. 使用virtualenv在ubuntu上搭建python 3开发环境

    ubuntu 13.04默认的python版本是2.7的,想在其上做python3的开发会遇到问题.比如要使用pip安装软件包时,默认安装的就是python2的包.如果想安装python3的包,就需要 ...

  6. windows 创建python独立开发环境

    参考廖雪峰教程:https://www.liaoxuefeng.com/wiki/1016959663602400/1019273143120480 进去的方式需要修改,找到自己创建的文件目录 在控制 ...

  7. Ubuntu系统下创建python数据挖掘虚拟环境

    虚拟环境:   虚拟环境是用于创建独立的python环境,允许我们使用不同的python模块和版本,而不混淆.   让我们了解一下产品研发过程中虚拟环境的必要性,在python项目中,显然经常要使用不 ...

  8. python项目构建工具zc.buildout

    转载:http://blog.csdn.net/u011630575/article/details/52940099 buildout简介 Buildout 是一个基于Python的构建工具, Bu ...

  9. Python学习之旅:使用virtualenv创建Python环境及PyQT5环境配置

    一.写在前面 从学 Python 的第一天起,我就知道了使用 pip 命令来安装包,从学习爬虫到学习 Web 开发,安装的库越来越多,从 requests 到 lxml,从 Django 到 Flas ...

随机推荐

  1. 【Linux/Ubuntu学习 7】E: 无法获得锁 /var/lib/dpkg/lock – open (11: 资源暂时不可用) E: 无法锁定管理目录

    在用sudo apt-get install 安装软件时,由于速度太慢,想换个软件源,直接关闭了终端,apt-get但进程没有结束,结果终端提示 :“E: 无法获得锁 /var/lib/dpkg/lo ...

  2. viewflipper动画切换屏幕

    整个项目的 package com.example.viewflipper; import android.R.integer; import android.app.Activity; import ...

  3. Java Script基础(四) BOM模型

    一.BOM模型 BOM模型(Browser Object Model),也称为文档对象模型,它包含浏览器相关的属性和方法,例如操作,前进后退按钮,控制地址栏,关闭浏览器窗口,打开新窗口等等.它包含的对 ...

  4. 放飞App:移动产品经理实战指南

    <放飞App:移动产品经理实战指南> 基本信息 原书名:App savvy:rurning ideas into iPhone and iPad Apps customers really ...

  5. VS2008/MVC2 项目迁移到 VS2013/MVC4

    第1步.MVC2 => MVC3 手动处理可以参考这个: http://www.asp.net/whitepapers/mvc3-release-notes#upgrading 使用工具 ASP ...

  6. Nginx 反向代理,流量转发到固定内网 IP 方法

    主配置文件: user nginx; worker_processes ; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pi ...

  7. 【WinAPI】User32.dll注释

    #region User32.dll 函数 /// <summary> /// 该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备 ...

  8. linux之磁盘配额(quota)

    1.什么是quota 简单的说就是限制用户对磁盘空间的使用量. 因为Linux是多用户多任务的操作系统,许多人共用磁盘空间,为了合理的分配磁盘空间,于是就有了quota的出现. 2.quota的用途  ...

  9. log4net保存到数据库系列四、完整代码配置log4net

    园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ...

  10. 【NodeJS】---express配置ejs mongoose route等

    express创建项目 命令行下: express prj_name cd prj_name && npm install ejs html var ejs = require('ej ...