使用Django mod_wsgi的ImportError

时间:2014-09-16 18:35:17

标签: python django apache mod-wsgi

我想将Django项目从测试服务器移动到Apache(CentOS版本2.2.15)。我使用[1]安装了mod_wsgi,并尝试使用[2]将我的项目挂载为wsgi应用程序。

我通过将测试wsgi.py文件放在与现有Django项目文件(wsgi.py)相同的目录中来跟踪Hello World示例(有用的SO线程[3])。这有效(例如,我可以通过wget访问)。

<VirtualHost *:80>
   DocumentRoot <abs_path>/myproject/myproject
   WSGIScriptAlias /wsgi  <abs_path>/myproject/myproject/test_wsgi.wsgi
</VirtualHost>

有了这个,我根据mod_wsgi和Django文档[2,4]对Apache配置文件进行了修改,指向我的Django项目wsgi文件(如下)。

WSGIPythonPath <abs_path>/myproject/myproject

<VirtualHost *:80>

   DocumentRoot <abs_path>/myproject/myproject
   WSGIScriptAlias /django  <abs_path>/myproject/myproject/wsgi.py

   <Directory <abs_path>/myproject/myproject>
            <Files wsgi.py>
                    # Require all granted
                    Order deny,allow
                    Allow from all
            </Files>
    </Directory>

</VirtualHost>

这会引发“500内部服务器错误:”“ImportError:没有名为django.core.wsgi的模块”


mod_wsgi是针对Python 2.7编译的,它安装了Django [5]。

ldd mod_wsgi.so 
linux-vdso.so.1 =>  (0x00007fff3ed30000)
libpython2.7.so.1.0 => /usr/local/lib/libpython2.7.so.1.0 (0x00007f641e11d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f641dee8000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f641dce4000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f641dae1000)
libm.so.6 => /lib64/libm.so.6 (0x00007f641d85c000)
libc.so.6 => /lib64/libc.so.6 (0x00007f641d4c9000)
/lib64/ld-linux-x86-64.so.2 (0x0000003c14e00000)

基于[6],我在wsgi.py中添加了python2.7站点包的路径:

# add the myproject project path into the sys.path
sys.path.append('<PATH_TO_MY_DJANGO_PROJECT>/myproject')
# add the python2.7 site-packages path to the sys.path
sys.path.append('<PATH_TO_python2.7>/Lib/site-packages')

我还在httpd.conf中添加了python2.7的路径:

WSGIPythonPath <PATH_TO_PROJECT>:<PATH_TO_python2.7>/Lib/site-packages

仍然,我得到“500内部服务器错误:”“ImportError:没有名为django.core.wsgi的模块”

有什么建议吗?


[1] http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide

[2] http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide

[3] Hello World in mod_wsgi

[4] https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/

[5] mod_wsgi isn't honoring WSGIPythonHome

[6] ImportError: No module named django.core.wsgi Apache + VirtualEnv + AWS + WSGI

1 个答案:

答案 0 :(得分:0)

阅读实际的Django文档。您将看到设置Python模块搜索路径的要求。你不应该证明这样做过。

另外,不要将DocumentRoot设置为Django项目的父目录。您正在打开自己的安全问题。更多是因为您将Django应用程序安装在子URL上,这意味着您的项目源代码(包括带有数据库密码的设置文件等)现在可由远程用户从站点的根目录下载。