4

在没有任何代码更改的情况下,我的 django 应用程序在加载 WSGI 脚本时开始抛出异常。我将 django 1.3 与 python 2.7 一起使用,顶层.wsgi基本上未修改默认值:

import os
import sys

from django.core.handlers.wsgi import WSGIHandler

os.environ['DJANGO_SETTINGS_MODULE'] = 'api.settings'
application = WSGIHandler()

正如 Apache 报告的那样,它开始在任何请求上产生这些错误:

mod_wsgi (pid=3283): Target WSGI script '/home/beder/webapps/api/api.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=3283): Exception occurred processing WSGI script '/home/beder/webapps/api/api.wsgi'.
Traceback (most recent call last):
  File "/home/beder/webapps/api/api.wsgi", line 4, in <module>
    from django.core.handlers.wsgi import WSGIHandler
  File "/home/beder/webapps/api/lib/python2.7/django/core/handlers/wsgi.py", line 10, in <module>
    from django import http
  File "/home/beder/webapps/api/lib/python2.7/django/http/__init__.py", line 122, in <module>
    from django.utils.http import cookie_date
  File "/home/beder/webapps/api/lib/python2.7/django/utils/http.py", line 7, in <module>
    from email.Utils import formatdate
  File "/usr/local/lib/python2.7/email/__init__.py", line 79, in __getattr__
    __import__(self.__name__)
  File "/usr/local/lib/python2.7/email/utils.py", line 27, in <module>
    import random
  File "/usr/local/lib/python2.7/random.py", line 47, in <module>
    from os import urandom as _urandom
ImportError: cannot import name urandom

我重新启动了服务器,它现在可以正常工作(没有错误)。我不知道该怎么办 - 我想确保这种情况不会再次发生,但现在没有发生,我不知道为什么会出现导入错误。

4

3 回答 3

3

你是在 virtualenv 中执行 Django 吗?您是否更新或升级了系统?如果是这样,并且您从 Python 2.6 升级到 Python 2.7,例如,您需要重新生成 virtualenv:

$ virtualenv [你的选项] [你的 django 项目目录]

于 2012-05-27T20:53:42.040 回答
2

对于使用像 Jesse 和我这样的 webfaction 来运行他的 django 应用程序但使用 virtualenv 的任何人,升级后可能发生的情况是,webapp 的自定义 apache 安装从未重新启动。这意味着 stdlib 已更改,但 apache 仍使用 python 2.7.2,因为它已加载到内存中。

这种情况下的解决方案很简单:通过 ssh 登录到您的帐户并执行:

[username@webXX ~]$ ~/webapps/<webapp-name>/apache2/bin/restart

这将重新启动 Web 服务器并导致 apache 重新加载新的解释器二进制文件。

于 2012-06-13T07:03:20.060 回答
0

当我从源代码构建将 Python 2.6.5 更新到 2.6.8 时,我也发现了同样的错误。我还从源代码构建了 mod_wsgi,最初忘记为新版本的 Python 重新编译 mod_wsgi,这导致了关于 urandom 的相同错误。

于 2013-05-07T08:51:01.007 回答