一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Python+wsgi+django解决python3和wsgi不兼容配置的方法

时间:2015-07-29 编辑:简简单单 来源:一聚教程网

配置这个Python + wsgi + django, 可谓曲折。来看:

 
***********************
安装环境:
Centos5.6
Python2.7
Mod_wsgi: mod_wsgi-4.4.13
Apache: httpd2.2
Django: Django-1.8.3
***********************

1. 安装Python: Python2.7

本来系统里已经自带了Python2.6, 为了我的追求极致,装逼的完美主义,我又安装了Python3.4. 并且把 /usr/local/bin/python 直接指向Python3.4. 将其设为python的主要程序。

此处就为悲剧的根源了。因为Python3 和 mod_wsgi 不兼容 (注:至少到现在我还没有找到能用使用python3 来安装的wsgi),我安装的时候直接使用 ./Configure   make    makeinstall 命令,导致系统先择了将apache 的python版本设置成了python2.6. (注:wsgi: 即为 the python web server gateway interface, 其作用就是apache能通过它来连接并使用Python)

但是由于我的django是用Python3安装的。最终导致apache根本就连接不上django, 我查询httpd下的error_log来回无数遍,终于发现httpd使用的是python2.6。所以只能果断使用python2了, 但是新的问题又出现了,因为下载的django版本过高,python2.6安装不了,所以最终结果就是:安装python2.7!

命令:

tar -xvf Python-2.7.10.tgz
cd Python-2.7
./configure --enable-shared

make

make install

可能遇到问题:python: error while loading shared  libraries: libpython2.7.so.1.0:
cannot open shared object file: No such file

原因: python2.7 的库找不到了

解决方案:1. 进入/etc/ld.so.conf.d/,

     2. 新建文件:vim python2.7.conf

     3. 添加python2.7的库的所在路径: /usr/local/lib

          4. 保存并退出,然后执行命令:ldconfig

2. 安装django: Django-1.8.3

直接进入安装包文件夹使用python安装

tar xzvf  Django-1.8.3 .tar.gz
cd  Django-1.8.3

sudo python  setup.py install

3. 安装mod_wsgi: mod_wsgi-4.4.13

下载地址:https://pypi.python.org/pypi/mod_wsgi

安装命令:

./configure --with-python=/usr/local/bin/python2.7

make

make install

可能遇到问题:

   3-1. apxs: command not found

       原因: apache 组件 httpd-devel 没有安装

       解决办法: yum install httpd-devel

   3-2. 在make时编译失败。查看错误第一行,发现:Sorry, Python developer package does not appear to be installed.

                原因:python组件 python-devel没有安装

                解决办法: yum install python-devel

4. 配置httpd(注:此目的为能让httpd能通过wsgi来使用python,并访问django的网站目录) 非常重要,也很容易出问题:

  4-1. 为httpd添加wsgi的动态链接库.so文件的链接:

         1. vim /etc/httpd/conf/httpd.conf

         2. 添加内容:LoadModule  wsgi_module modules/mod_wsgi.so

         3. 保存退出。

4-2. 继续修改httpd.conf, 添加django项目的路径,比如我新建的django网站的路径为:/var/www/html/mysite, 则配置为如下:

WSGIPythonPath /var/www/html/mysite
WSGIScriptAlias / "/var/www/html/mysite/mysite/wsgi.py"



            Order Allow,Deny
            Allow from all
   
            Order allow,deny
            Allow from all
   



4-3. 配置wsgi文件

一般django生成项目时会自动帮你配置好wsgi.py文件。不需要自己配的,前提是你的wsgi得装好了。我的/var/www/html/mysite/mysite/wsgi.py 内容如下:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

5. 重启httpd service: service httpd restart

至少则配置问题基本解决. 如果遇到新的问题,就得上stackoverflow再去查一下了。




apache+wsgi+django配置

WSGI是什么?

WSGI的官方定义是,the Python Web Server Gateway Interface。从名字就可以看出来,这东西是一个Gateway,也就是网关。网关的作用就是在协议之间进行转换。

也就是说,WSGI就像是一座桥梁,一边连着web服务器,另一边连着用户的应用。但是呢,这个桥的功能很弱,有时候还需要别的桥来帮忙才能进行处理。
Django 是什么?

Django(发音:/ˈdʒæŋ?oʊ/ JANG-goh) 是用python语言写的开源web开发框架(open source web framework),它鼓励快速开发,并遵循MVC设计。Django遵守 BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。最新发行版本是Django 1.3.1,于2011年09月10日发布.

Django 根据比利时的爵士音乐家Django Reinhardt命名,他是一个吉普赛人,主要以演奏吉它为主,还演奏过小提琴等。
设计哲学

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(Do Not Repeat Yourself)原则。

Django基于MVC的设计十分优美:

对象关系映射 (ORM,object-relational mapping)

以Python类形式定义你的数据模型,ORM将模型与关系数据库连接起来,你将得到一个非常容易使用的数据库API,同时你也可以在Django中使用原始的SQL语句。

URL 分派

使用正则表达式匹配URL,你可以任意设计的URL,没有框架的特定限定。象你喜欢的一样灵活。

模版系统

使用Django强大而可扩展的模板语言,可以分隔设计、内容和Python代码。并且具有可继承性。

表单处理

你可以方便的生成各种表单模型,实现表单的有效性检验。可以方便的从你定义的模型实例生成相应的表单。

Cache系统

可以挂在内存缓冲或其它的框架实现超级缓冲 -- 实现你所需要的粒度。

会话(session),用户登录与权限检查

快速开发用户会话功能。

国际化

内置国际化系统,方便开发出多种语言的网站。

自动化的管理界面

不需要你花大量的工作来创建人员管理和更新内容。Django自带一个ADMIN site,类似于内容管理系统。

软件版本:

操作系统:Archlinux Kernel 3.1.0-4-ARCH x86_64
WEB服务器:  Apache/2.2.21
Python: Python/2.7.2
Django:  1.3.1
wsgi: mod_wsgi/3.3

1. 安装apache和python

在Archlinux上我已经用pacman安装好了apahce和python,接下来安装mod_wsgi

2. 安装WSGI

pacman -S mod_wsgi
这里是Archlinux,如果是其他操作系统,请google。
安装好之后,会生成mod_wsgi的apache模块,位置在 /usr/lib/httpd/modules/mod_wsgi.so。
在apache的配置文件里载入模块:
LoadModule wsgi_module modules/mod_wsgi.so

3. 配置apache虚拟主机


    ServerName webpy.test.com
    WSGIScriptAlias / /home/max/mysite/django.wsgi

   
        Options FollowSymLinks Indexes
        AllowOverride all
        Order Deny,Allow
        Allow from all
   


    ErrorLog "/var/log/httpd/webpy-error.log"
    CustomLog "/var/log/httpd/webpy-access.log" combined



上面红色的一行是让加载django的wsgi配置文件(django本身就支持WSGI协议)

4. 安装django

shell> pacman -S django
也可以选择下载源码安装,因为django本身全部用python编程,所以下载django的安装包之后,进入到
django源码目录,执行以下命令即可安装django:
shell> python setup.py install

5. 配置django

我们现在建立一个django的项目,建立好项目文件夹之后,django会自动生成一些项目文件:
shell> django-admin.py startproject mysite
django-admin.py是django本身的一个管理程序,除了用于新建项目之外,还有很多用途。
mysite是新建的项目名称,这样就会在当前目录下生成一个mysite的文件夹。
__init__.py  __init__.pyc manage.py  settings.py  urls.py
上面就是mysite目录下的文件,这是django项目的初始文件。

6. 配置django的wsgi文件

在mystei目录下新建一个django.wsgi文件,内容如下:

import os
import sys

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

path = '/home/max'

if path not in sys.path:
    sys.path.append(path)

mysite.settings是mysite项目的配置文件,django项目的配置文件就是python代码;在mysite目录下可以看到settings.py文件。
由于当前目录没有在系统的PATH变量里,所以mod_wsgi无法寻找到settings.py文件,为了帮它找到,
我们把mysite目录的上一级目录,追加到PATH变量里。
sys.path.append(path)

7. 启动django项目

重启apache服务器
shell> apachectl restart
在浏览器打开 http://webpy.test.com,即可看到django的欢迎页面。

启动django的项目其实还有一种更快的方式,就是在mysite项目的目录下,执行:
shell> python manage.py runserver 8000
会出现以下信息:

Django version 1.3.1, using settings 'mysite.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

这是浏览器打开http://127.0.0.1:8000,即可看到django的淡蓝色页面。
这其实启动开发服务器,它每次只能服务器一个用户,所以不能在生产环境使用它。

热门栏目