Django1.4 python2.7

发布时间:2019-09-08 09:11:38编辑:auto阅读(1791)

    Django1.4 python2.7 apache mod_python 安装与部署实例

     

    花了四、五天时间终于把Django1.4 + python2.7 + apache + mod_python环境搭好,并通过实例验证。本文整合了网上的可用资源并解决了当前网络没有提到的问题,比如apache部署djang1.4问题。

    另外,本文所提到的所有包没有用yum自动安装,都是完全手动安装,这样能够更好地了解整个项目流程,同时锻炼自己linux的熟练程度(特别是对于新手)。 


    目录:

    一、实验环境

    二、Gcc安装(RPM手动安装)

    三、安装Apache2

    四、安装python2.7

    五、安装mod_python

    六、安装部署django

     

    一、实验环境

     

    Centos5.5

     

    Apache2: httpd-2.2.22.tar.gz

    http://www.fayea.com/apache-mirror//httpd/httpd-2.2.22.tar.gz

     

    python2.7: Python-2.7.2.tar.bz2

    http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz2

     

    django1.4: Django-1.4.2.tar.gz

    https://www.djangoproject.com/download/1.4.2/tarball/

     

    mod_python: mod_python-3.3.1.tgz

    http://archive.apache.org/dist/httpd/modpython/mod_python-3.3.1.tgz

     

    注意1:因为python是用C写的,所以需要用gcc进行编译,所以需要先安装gcc。如果机器没有安装gcc,请先按第二节的内容安装gcc


    注意2:本次实验所用linux kernel版本为centos5.5。最新版本为centos6,编译安装大同小异,步骤都差不多,只是有些包需要更新的版本。相信对linux稍微熟悉的人都应该能搞定,本文不再介绍。

     

    二、Gcc安装(RPM手动安装)

     

    如果机器已装gcc,请跳过此节。

     

    需要的包:

    kernel-headers-2.6.18-308.el5.x86_64.rpm

    glibc-headers-2.5-49.x86_64.rpm

    glibc-devel-2.5-49.x86_64.rpm

    libgomp-4.4.0-6.el5.x86_64.rpm

    gcc-4.1.2-48.el5.x86_64.rpm

     

    如果还要装c++optional):

    libstdc++-devel-4.1.2-52.el5.x86_64.rpm

    cpp-4.1.2-48.el5.x86_64.rpm

     

    安装步骤:

    rpm –ivh kernel-headers-2.6.18-308.el5.x86_64.rpm

    rpm –ivh glibc-headers-2.5-49.x86_64.rpm

    rpm –ivh glibc-devel-2.5-49.x86_64.rpm

    rpm –ivh libgomp-4.4.0-6.el5.x86_64.rpm

    rpm –ivh gcc-4.1.2-48.el5.x86_64.rpm

     

    这里用rpm –ivh命令进行安装,如果提示系统中已存在较旧版本,先把rpm –ivh替换为rpm –Uvh

    另外,请注意自己机器是64位还是32位的,如果是64位机器,请下载后缀为*.x86_64.rpm的包。如果是32位机器,请下载后缀为*.i386.rpm的包。

     

    安装完后在命令行打rpm -qa|grep gcc。出现

    libgcc-4.1.2-48.el5.x86_64

    gcc-4.1.2-48.el5.x86_64

    之类的结果,证明安装完成。

     

     

     

    三、安装Apache2

     

    安装apache听似简单,由于我们应用需要apache模块共享,所以不能按网上的一般配置。

     

    (1)进入httpd-2.2.22.tar.gz所在目录

    (2)tar -zvxf httpd-2.2.22.tar.gz

    (3)cd httpd-2.2.22

    (4) ./configure --prefix=/opt/apache --with-config-file-path=/opt/apache/conf  --enable-mods-shared=most --enable-track-vars --enable-cgi --enable-so --enable-file-cache --enable-disk-cache --enable-cache --enable-mem-cache --enable-dumpio --enable-logio --enable-mime-magic --enable-headers --enable-usertrack --enable-version --enable-ssl --enable-http --enable-rewrite --enable-proxy --enable-proxy-connect --enable-proxy-http --enable-proxy-ftp --enable-proxy-ajp --enable-proxy-balancer

    (5)make

    (6)make install

     

    注意:我们enable了很多功能,以便以后开发其他应用。但上面这样的./configure方面会出现某些包没有的情况。如果不想太麻烦,就把缺少的包的相关选项去掉吧。比如,我的机器没有装openssl,按上面的配置会报错,于是我把—enable-ssl去掉,编译安装通过。

     

    这样,我们就把apapch装到/opt/apache下面了。

     

    相关操作(启动、重启、停止):

    首先到apachebin目录下

    #cd bin

    启动apache

    #./apachectl start

    然后在浏览器中输入http://localhost就可以看见it works!的字样。

     

    重启apache

    #./apachectl restart

     

    关闭apache

    #./apachectl stop

     

    注意1:使用apache过程中如果出现

    httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

    之类的错误

    解决办法非常简单:

    #vim /opt/apache/conf/httpd.conf (在这里/opt/apahce是我安装apache的目录,你默认安装的话应该是/usr/local/apache2/icons)

    找到#ServerName www.example.com:80   把#去掉,再重启apache即可没事了。

     

    注意2:如果报的错误是:

    Stopping httpd:                                            [FAILED]

    Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80

    (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80

    no listening sockets available, shutting down

    Unable to open logs

    80端口被其他程序占用,

     fuser -k -n tcp 80

    再重新启动。

     

    四、安装python2.7

     

    Django本身是纯Python编写的,所以安装框架的第一步是确保你已经安装了Python。核心Django框架可以工作在2.x上。对于最新版本的python 3.x,网上有些资料说流行的Django框架暂时还不支持。所以,我们安装python2.7版本。

     

    一般linux系统会自带Python,一般是2.4版本的,我们需要重新安装,这里注意,不要使用yum安装,而要用源码编译的方法安装,不然下面在配置之后会出错。

     

    下面的步骤是整个项目的核心,请集中注意力!!!任何一招棋错,什么都会输!!!

     

    1、安装readline-devel

    为什么要装readline-devel?因为自定义安装的python库中没能找到readline相关库,导致安装后退格,方向键无法正常使用。

     

    下载readline-devel-5.1-3.el5.x86_64.rpm

    rpm –ivh readline-devel-5.1-3.el5.x86_64.rpm

     

    2、安装python2.7

     

    #tar -xvf Python-2.7.tar.bz2

    #cd Python-2.7

    #./configure  --enable-shared

    这里一定要注意,解压完之后要设置enable-shared,这样编译后会链接成共享对象,供apache使用

     

    这里不要急着make && make install!!

     

    django会用到zlib相关的库,所以这里先把zlib库加进来(原理请到http://www.cnblogs.com/lexus/archive/2012/02/23/2365660.html 精读)

     

    #cd Modules/zlib

    #./configure --shared    后面这个--shared一定要加,没加它哥哥我调试了几个小时T_T

    #make && make install

     

    然后再回到python2.7的目录

     

    #cd ../..

    #make && make install

    #python setup.py install

     

    相关文章:

    http://jisedai.vayn.de/2011/06/28/python-3-installation-note.html

     

    3、运行测试

    在命令行打入python

    a)  这时可能会出现以下错误

    python: error while loading shared  libraries: libpython2.7.so.1.0:

      cannot open shared object file: No such file or

     

    解决方案:

     

    新建下面文件

      vim /etc/ld.so.conf.d/python2.7.conf

      加入内容:

      /usr/local/lib

      保存退出后运行:

      ldconfig

     

    再次执行 python,问题成功解决。

     

    b)  上述问题解决后或是没有出现。再执行python

    import zlib >>> exit()

    没有问题了。

     

    注意1:如果出现错误:

    /usr/local/lib/python2.7/config/libpython2.7.a:  could not read symbols: Bad value

      collect2: ld returned 1 exit status

      apxs:Error: Command failed with rc=65536

     

    这是因为安装python的时候,没有   ./configure  --enable-shared

    加上后重新编译,然后运行python

     

    注意2:重新编译时出现类似下面错误:

    /bin/sh /usr/local/httpd-2.2.3/srclib/apr/libtool --mode=install /usr/bin/install -c -m 755 libaprutil-1.la /usr/local/apache2/lib

    libtool: install: error: cannot install `libaprutil-1.la' to a directory not ending in /usr/local/apache22/lib

    make[2]: *** [install] Error 1

     

    原因是原先安装编译时候的垃圾文件没有清理。解决方法很简单,回来configure文件所在目录

    #make clean

    #make distclean

    完成后就能重新./configure && make && make install

     

     

    五、安装mod_python

     

    本项目决定用mod_python作为apache部署django的模块驱动。但在django的官网上提到mod_python将会成为过去时,在未来的某个django版本中,mod_python将被抛弃,进而用mod_wsgi取代。考虑到时间因素,我们占时使用仍然比较健壮的mod_python+apache+python组合,在未来慢慢改为mod_wsgi。官网资料如下:

    https://docs.djangoproject.com/en/1.2/howto/deployment/modpython/

     

    (1) 进入mod_python所在目录

    (2)tar -zvxf mod_python-3.3.1.tgz

    (3)cd mod_python-3.3.1

    (4)./configure --with-apxs=/opt/apache/bin/apxs --with-python=/usr/local/bin/python2.7

    (5)make

     

    注意:这里有一个bug

    connobject.c: In function '_conn_read':

    connobject.c:142: error: request for member 'next' in something not a structure

    or union

    apxs:Error: Command failed with rc=65536

    make[1]: *** [mod_python.so] Error 1

    make[1]: Leaving directory `/usr/src/rpm/BUILD/mod_python-3.3.1/src'

    make: *** [do_dso] Error 2

     

    需修改mod_python-3.3.1/src/connobject.c

    !(b == APR_BRIGADE_SENTINEL(b)

    !(b == APR_BRIGADE_SENTINEL(bb)

     

    完毕之后,mod_python 会在 /opt/apache/modules 中添加 mod_python.so 库文件,并且在/usr/local/bin/python2.7/site-packages 中添加 mod_python 包。

     

    如果编译程序没有检测到 apache 和 python,会报错退出。

     

    =====================================================================

     

    上面步骤弄好后

    配置 httpd.conf

    找到 /opt/apache/conf/httpd.conf 配置文件,在适当(文件中LoadModule所在位置)位置添加:

    LoadModule python_module modules/mod_python.so

     

    注意:上面这句话非常非常重要,要跟所有LoadModule 配置放到一起,如果加到最后无法找到这个模块。

     

    相关文章:

    http://blog.csdn.net/boycycyzero/article/details/7339500

    http://xiaoyu9805119.blog.163.com/blog/static/4209156200731932353684/

     

     

    六、安装部署django

     

    本项目django版本为1.4.2。虽然网上有很多介绍django安装资料,但由于版本不同,安装django并把django部署到apache上的方法也有差别。换句话说,现在关于django1.4部署到apache上的中文资料只有我这篇文章可靠!!

     

    (1)进入django所在目录

    (2)#cd Django-1.4.2

    (3)#python2.7 setup.py install

    (4)测试,#python>>>import django>>>django.VERSION 出现相关版本号

    安装很简单,完成。

     

    配置部署一个项目:

    (1)进入你要建立项目的目录,比如/opt/apache/htdocs

    (2)建立一个项目

    # django-admin.py startproject dongxinpeng

    对于早期版本的django来说,执行上述命令会出现一个叫dongxinpeng的文件夹,里面有4个文件:__init__.py, manage.py, settings.py, urls.py

    然而,在django1.4中执行上述命令出现的东西不一样,目录结构如下

    dongxinpeng

    -------manage.py

    -------dongxinpeng

    --------------settings.py

    --------------urls.py

    --------------__init__.py

    --------------wsgi.py

    因此,如果不是完全了解运行机制的话,按网上的配置方法根本行不通!

     

    下面配置 httpd.conf

    找到 /opt/apache/conf/httpd.conf 配置文件,在文件中的

    # Virtual hosts

    #Include conf/extra/httpd-vhosts.conf

    后面加上

     

    <VirtualHost *:80>

            ServerName www.example.com

     

            <Location "/dongxinpeng">

                SetHandler python-program

                PythonHandler django.core.handlers.modpython

    PythonPath "['/opt/apache/htdocs/dongxinpeng'] + sys.path"

                SetEnv DJANGO_SETTINGS_MODULE dongxinpeng.settings

                PythonDebug On

    </Location>

    </VirtualHost>

     

    保存,退出。

    重启apache

     

     

     

    相关文章:

    http://blog.csdn.net/wulei202/article/details/7667473

    http://www.cnblogs.com/oubo/archive/2012/04/06/2434961.html

    http://blog.csdn.net/wklken/article/details/7389502

     

     

    (3)测试django

    在浏览器中输入http://localhost/dongxinpeng

    出现:

    It worked!

    Congratulations on your first Django-powered page.


关键字

上一篇: 3月26日

下一篇: [Python]linux python