使用python3的Django ImportError和Centos7中编译的mod_wsgi

时间:2016-10-29 23:34:02

标签: django python-3.x mod-wsgi importerror centos7

我最近在Django中设置了一个新项目。我现在在/etc/httpd/logs/error.log中收到错误:

  

[Thu Oct 27 22:43:40.314525 2016] [wsgi:error] [pid 47381] [远程   127.0.0.1:52662] ImportError:没有名为'myproject.settings'的模块

我最初完成了民意调查教程,并使用了它:

  • Centos7
  • Django 1.10
  • 的virtualenv
  • Apache 2.4
  • MariaDB 10.1.17(与mysql的工作方式相同)
  • Python 3.4.3
  • mod_wsgi(使用yum。这使用了python2.7)

这一切都奏效了,但我注意到当我使用内部网络服务器运行这个项目时

./manage.py runserver

它使用了python3。当我使用带有mod_wsgi的apache运行这个项目时,它使用了python 2.7。它功能齐全,所有网页都有效,但是他们使用的是python2.7。

所以我发现我的错误(或者其中一个)是使用yum安装mod_wsgi而不是从源代码编译它。

所以我使用

卸载了mod_wsgi
yum remove mod_wsgi

然后我使用

从源代码编译mod_wsgi
wget "https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.7.tar.gz"
tar -xzf '4.5.7.tar.gz'
cd ./mod_wsgi-4.5.7
./configure --with-python=/bin/python3.4
make
make install

然后我必须在/etc/httpd/conf/httpd.conf中添加一行:

LoadModule wsgi_module modules/mod_wsgi.so

当我现在尝试运行它时,我收到上面的ImportError消息。我的wsgi.py文件是:

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")

application = get_wsgi_application()

为了进行调试,我已将wsgi.py文件替换为:

import sys

def application(environ, start_response):
    status = '200 OK'

    output = ''
    output += 'sys.version = %s\n' % repr(sys.version)
    output += 'sys.prefix = %s\n' % repr(sys.prefix)
    output += 'sys.path = %s\n' % repr(sys.path)
    output += 'mod_wsgi.process_group = %s\n' % repr(environ['mod_wsgi.process_group'])
    output += 'mod_wsgi.application_group = %s\n' % repr(environ['mod_wsgi.application_group'])

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [str.encode(output)]

给我输出:

  

sys.version ='3.4.3(默认,2016年8月9日,17:10:3​​9)\ n [GCC 4.8.5   20150623(Red Hat 4.8.5-4)]'sys.prefix ='/ usr'sys.path =   [ '/家/ myuser的/ MyProject的',   '/home/myuser/myproject/myprojectenv/lib/python3.4/site-packages',   '/usr/lib64/python34.zip','/ usr / lib64 / python3.4',   '/usr/lib64/python3.4/plat-linux','/usr/lib64/python3.4/lib-dynload',   '/usr/lib64/python3.4/site-packages',   '/usr/lib/python3.4/site-packages'] mod_wsgi.process_group =   'myproject'mod_wsgi.application_group ='localhost.localdomain |'

我已经浏览过django文档,以及mod_wsgi文档,似乎无法找到我的问题。

我的httpd配置是/etc/httpd/config.d/django.conf:

Alias /static /home/myuser/myproject/static
<Directory /home/myuser/myproject/static>
    Require all granted
</Directory>

<Directory /home/myuser/myproject/myproject>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

WSGIDaemonProcess myproject python-path=/home/myuser/myproject:/home/myuser/myproject/myprojectenv/lib/python3.4/site-packages
WSGIProcessGroup myproject
WSGIScriptAlias / /home/myuser/myproject/myproject/wsgi.py

我的项目正在使用django教程中的标准文件结构:

  • /home/myuser/myproject/myproject/wsgi.py

静态文件仍然通过apache正确提供。有什么想法吗?

0 个答案:

没有答案