2013年12月

如何快速搭建一个Python开发环境

本文基于 Linux 系统,记录如何快速搭建一个 Python 虚拟环境。

一、安装环境

首先确保系统上已经安装了 Python 2.6 及以上版本。

虚拟环境是通过一个 Python 脚本安装的,先下载这个脚本到项目目录,如 /home/eric/pytest/ 。

解压后,执行:

$ python virtualenv.py flask

上面的命令会在 flask 目录里面创建一个完整的 Python 虚拟环境。接下来安装 flask:

$ flask/bin/pip install flask
$ flask/bin/pip install flask-login

这个命令会下载、安装 Flask-0.10.1.tar.gz , Werkzeug-0.9.4.tar.gz , Flask-Login-0.2.9.tar.gz , Jinja2-2.7.1.tar.gz , itsdangerous-0.23.tar.gz , MarkupSafe-0.18.tar.gz。

至此,虚拟环境安装完毕。

二、试着运行一个例子

(1)在项目目录(/home/eric/pytest/)中创建目录 app,并在该目录中创建一个初始化脚本 __init__.py

from flask import Flask
app = Flask(__name__)
from app import views

说明:该脚本导入 Flask 类并初始化一个实例 app,同时导入 app 包下面的 views 视图模块(这是接下来需要创建的视图文件)。

(2)再在 app 目录中,创建视图文件 views.py:

from app import app

@app.route('/')
@app.route('/index/')
def index():
    return "Hello, World!"

说明:该文件映射了 2 个 URL 路径 / 和 /index/,并向浏览器返回一个字符串。

(3)最后在项目目录中,创建一个启动脚本 run.py:

#!flask/bin/python
from app import app
app.run(debug=True, host='127.0.0.1', port=5000)

说明:该文件会从 app 包中导入 变量 app(即初始化脚本中实例化的类),然后调用 run() 方法来启动服务器。run() 方法中,debug 参数表示是否启动调试模式,因为每次修改代码都需要手动重启,如果启用调试模式,则无需重启服务,它会自动重新载入;host 指定服务器的 IP 地址,默认值为 localhost(127.0.0.1),port 参数表示监听的端口,默认值为 5000。

然后启动该脚本来运行服务器。

不过在运行,需要给 run.py 文件增加可执行权限:

chmod a+x run.py

再执行 ./run.py 即可。

现在可以通过 http://10.1.0.11:5000 或者 http://10.1.0.11:5000/index/ 来访问刚刚写的 index() 方法了。


附1. 还可以安装更多的扩展包:

flask/bin/pip install flask-openid
flask/bin/pip install flask-mail
flask/bin/pip install flask-sqlalchemy
flask/bin/pip install sqlalchemy-migrate
flask/bin/pip install flask-whooshalchemy
flask/bin/pip install flask-wtf
flask/bin/pip install flask-babel
flask/bin/pip install flup

附2. 本文示例所使用的环境:

Linux虚拟机 CentOS release 6.4 (Final)
Python 2.6.6 (r266:84292, Feb 22 2013, 00:00:18)

Nginx不支持.htaccess也不建议采用.htaccess机制

有人采用这样的方法,让 Nginx 支持 .htaccess :

  1. 新建一个 .htaccess 文件,并写上 Nginx 的 rewrite 规则,上传到网站根目录,如下示例

    rewrite ^/post/([0-9]+)/?$ /read.php?p=$1 last;

  2. 修改 Nginx 虚拟主机的配置文件,在 server 块中引入这个 .htaccess 文件

    include /var/www/site/.htaccess

  3. 同时将增加如下配置,防止 .ht 开头的文件被外部访问

    location ~ /.ht
    {

    deny all;

    }

  4. 重启 Nginx 服务。

这种方法有一个缺点在,每次修改 .htaccess 文件,需要重新启动 Nginx 服务,以使之生效。更大的缺点在于,如果某个虚拟主机下的 .htaccess 文件有问题,将导致 Nginx 无法重启。

而 Apache 的 .htaccess 实现的原理是,对于每个请求,都会去读取该文件。如果该请求是一个深层次目录,服务器还会逐级查询并解析每个目录下的 .htaccess 文件,子目录会覆盖上层目录的配置。所以,.htaccess 文件的每次修改都会即时生效。但是,这在效率上,是有很大影响的。另外,Apache 的 .htaccess 配置不会影响其它虚拟主机的配置,各自是相互独立的。

也就是上面的实现方法,本质上与 .htaccess 的原理是完全不同的。

在 Nginx 官网上的说明是:实现不了,也没必要。并且列出了一堆数据,来表明 .htaccess 对性能的影响相当大。Nginx 的设计原则是效率优先。

那么如果在 Nginx 主机上实现 URL 重写呢。当然是直接在配置文件中,修改相应的 server 段。