使用virtualenv或zc.buildout创建Python-tornado分离环境
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分离环境的更多相关文章
- 用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境
作为主流开发语言, 用python 开发的程序越来越多. 方便的是大多linux系统里面都默认集成了python, 开发可以随时随地开始. 但有时候这也成为了一个短板, 比如说有时候我们需要开发和调试 ...
- 用pyenv和virtualenv搭建单机多版本python虚拟开发环境
作为主流开发语言, 用python 开发的程序越来越多. 方便的是大多linux系统里面都默认集成了python, 开发可以随时随地开始. 但有时候这也成为了一个短板, 比如说有时候我们需要开发和调试 ...
- CentOS下用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境
安装 系统环境:CentOS 6.5 安装依赖 yum -y install gcc gcc-c++ make git patch openssl-devel zlib-devel readline- ...
- 【转】使用virtualenv在ubuntu上搭建python 3开发环境
ubuntu 13.04默认的python版本是2.7的,想在其上做python3的开发会遇到问题.比如要使用pip安装软件包时,默认安装的就是python2的包.如果想安装python3的包,就需要 ...
- 使用virtualenv在ubuntu上搭建python 3开发环境
ubuntu 13.04默认的python版本是2.7的,想在其上做python3的开发会遇到问题.比如要使用pip安装软件包时,默认安装的就是python2的包.如果想安装python3的包,就需要 ...
- windows 创建python独立开发环境
参考廖雪峰教程:https://www.liaoxuefeng.com/wiki/1016959663602400/1019273143120480 进去的方式需要修改,找到自己创建的文件目录 在控制 ...
- Ubuntu系统下创建python数据挖掘虚拟环境
虚拟环境: 虚拟环境是用于创建独立的python环境,允许我们使用不同的python模块和版本,而不混淆. 让我们了解一下产品研发过程中虚拟环境的必要性,在python项目中,显然经常要使用不 ...
- python项目构建工具zc.buildout
转载:http://blog.csdn.net/u011630575/article/details/52940099 buildout简介 Buildout 是一个基于Python的构建工具, Bu ...
- Python学习之旅:使用virtualenv创建Python环境及PyQT5环境配置
一.写在前面 从学 Python 的第一天起,我就知道了使用 pip 命令来安装包,从学习爬虫到学习 Web 开发,安装的库越来越多,从 requests 到 lxml,从 Django 到 Flas ...
随机推荐
- socket总结
Socket简介 1,socket是什么? 2,socket的作用 3,socket怎么用 4,socket的扩展 ——————————————————- socket是什么? Socket这个名词现 ...
- MySQL关于InnoDB的几个错误
阿里云服务器上装有MySQL 5.6,这几天MySQL服务经常死掉,启动MySQL服务(service mysql start),却报如下错误 Starting MySQL.. ERROR! The ...
- java 生成UUID
UUID(Universally Unique Identifier)全局唯一标识符,是一个128位长的数字,一般用16进制表示. 算法的核心思想是结合机器的网卡.当地时间.一个随即数来生成UUID, ...
- 使用jsoup进行网页内容抓取
对网页内容的抓取比较的感兴趣,于是就简单的学习了一下,如果不使用任何的框架去抓取网页的内容,感觉有点难度,我就简单点来吧,这里所使用的jsoup框架,抓取网页的内容与使用jquery选择网页的内容差不 ...
- jQuery的deferred对象详解(一)
最近一段时间,都在研究jquery里面的$.Deffered对象,几天都搞不明白,其中源码的运行机制,网上查找了相关的资料,<jQuery的deferred对象详解>阮一峰老师的文章,里面 ...
- codeforces 677C C. Vanya and Label(组合数学+快速幂)
题目链接: C. Vanya and Label time limit per test 1 second memory limit per test 256 megabytes input stan ...
- android注解[Jake Wharton Butter Knife]
Introduction Annotate fields with @InjectView and a view ID for Butter Knife to find and automatical ...
- 关于MSSQL导入导出时主键与约束丢失的问题解决
导入数据时,使用默认选项,会丢失主键.约束.默认值等属性,按如下步骤操作: -->导出向导 -->选择数据源 -->选择目的 -->指定表复制或查询:不要使用默认选项,选择“在 ...
- iOS10.1不能调试解决方案
对于一些有强迫证的程序员来说只要苹果更新系统,会马上更新,但是军哥更新过10.1的系统后发现Xcode8不能调试了 苹果这次太不人性话了,解决办法,最简单的是 拷贝iOS10.1支持文件放在Xcode ...
- html使用空格对齐文本( ;&emsp;&ensp;)
字符以及HTML实体 描述以及说明 这是我们使用最多的空格,也就是按下space键产生的空格.在HTML中,如果你用空格键产生此空格,空格是不会累加的(只算1个).要使用html实体表示才可累加. ...