zoukankan      html  css  js  c++  java
  • Python 学习笔记13:Python + wsgi + django 配置。坑爹的python3和wsgi不兼容的解决

    今人不见古时月,今月曾经照古人。生命是如此的美丽与短暂!

    学习Python已经两个月了,Python的语法通过做简单的语法题和看Python语法介绍,有了初步的了解。但上班还是要做别的事情,所以感觉学起来特别慢。有一种时不我待的感觉。

    基本的语法了解了,接下来就要尽快进入到项目的实战。这样才能快速的遇到问题,并解决问题,迅速提升能力。

    开始当然就是先按网上的一般步骤,用django写个博客网站出来。

    接下来就是血泪啊!配置这个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

               参考链接: http://www.cnblogs.com/bolddream/p/mod_wsgi.html

    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"
    
    
    <Directory "/var/www/html/mysite/mysite">
                    Order Allow,Deny
                    Allow from all
            <Files wsgi.py>
                    Order allow,deny
                    Allow from all
            </Files>
    </Directory>

             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再去查一下了。

    下一篇讲一下怎么用django建blog网站。

  • 相关阅读:
    Markdown
    DNS解析流程
    maven 的各种命令
    ES6初体验——(1)let和const命令
    table相关的选择器 & children()与find()的区别 & 选择器eq(n)与nth-child(n)的差异
    Java MD5加密类
    POI操作Excel异常Cannot get a text value from a numeric cell
    MyEclipse+SSH开发环境配置
    JdbcTemplate详解
    Spring配置声明
  • 原文地址:https://www.cnblogs.com/bolddream/p/4684035.html
Copyright © 2011-2022 走看看