无法将目标WSGI脚本作为Python模块加载

71 投票
19 回答
142327 浏览
提问于 2025-04-16 20:08

我正在尝试用apache部署mod_wsgi来运行一个django应用,但遇到了500内部服务器错误。apache的日志显示:

[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] mod_wsgi (pid=16142): Exception occurred processing WSGI script '/home/user/bms/apache/django.wsgi'.
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] Traceback (most recent call last):
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64]   File "/home/user/bms/apache/django.wsgi", line 13, in <module>
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64]     import django.core.handlers.wsgi
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] ImportError: No module named django.core.handlers.wsgi

我的apache虚拟主机配置如下:

<VirtualHost *:80>

    DocumentRoot /home/user/bms

    <Directory /home/user/bms>
        Order allow,deny
        Allow from all
    </Directory>

WSGIDaemonProcess bms user=user group=user processes=2 threads=25 python-path=/usr/local/lib/python2.7/site-packages


    WSGIProcessGroup bms

    WSGIScriptAlias / /home/user/bms/apache/django.wsgi

</VirtualHost>

还有我应用目录中引用的wsgi文件,权限设置为0777:

import os
import sys

path = '/home/user/bms'
if path not in sys.path:
    sys.path.append(path)

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

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

我听说这可能是因为apache用户没有正确的权限。不过我不知道该怎么解决。我也尝试过用www-data用户启动守护进程,但问题依然没有解决。

编辑:

我通过把虚拟主机文件复制到默认的那个文件中来解决了这个问题,然后用a2dissite禁用了旧的那个。我不知道怎么才能“正确”地做到这一点,也不知道怎么设置apache去使用我想要的虚拟主机。

19 个回答

6

我遇到了一个类似的问题,日志里出现了这样的错误信息:

目标 WSGI 脚本 '/home/web2py/wsgihandler.py' 无法作为 Python 模块加载。

解决办法是删除了 /etc/httpd/conf.d/wsgi.conf 文件中一个错误的 WSGIPythonHome 指令(这个指令指向了应用程序目录)。

我使用的是 RedHat,安装的是 CentOS 的软件源。

建议按照 Graham Dumpleton 的安装和配置说明进行操作。测试配置时用的是 hello world 应用,这让我发现 mod_wsgi 是正常工作的,问题出在配置上。

不过,错误信息并没有给出太多关于问题的线索。

23

对我来说,问题在于WSGI脚本没有设置为可执行。

sudo chmod a+x django.wsgi

或者直接这样做

sudo chmod u+x django.wsgi

只要你有正确的文件拥有者就可以了

82

对我来说,问题出在wsgi和python版本不匹配。我当时使用的是python 3,所以:

$ sudo apt-get remove libapache2-mod-python libapache2-mod-wsgi
$ sudo apt-get install libapache2-mod-wsgi-py3

来自@alxs的警告:在你复制/粘贴这些命令之前,请注意:
如果服务器上有使用wsgi和apache的python 2项目,这些命令会让它们无法运行。

撰写回答