在没有任何代码更改的情况下,我的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
我重新启动了服务器,现在它正常工作(没有错误)。我不知道该做什么 - 我想确保这不会再次发生,但现在没有发生,我不知道为什么会出现导入错误。
答案 0 :(得分:3)
你是否在virtualenv中执行Django?您是否更新或升级了系统?如果是这样,你从Python 2.6升级到Python 2.7,例如你需要重新生成virtualenv:
$ virtualenv [your-options] [your-django-project-directory]
答案 1 :(得分:2)
对于使用像Jesse和我这样的webfaction来运行他的django应用但使用virtualenv 而不是的任何人,可能会发生升级后,webapp的自定义apache安装从未重新启动。这意味着stdlib已更改,但apache仍使用python 2.7.2,因为它已加载到内存中。
这种情况下的解决方案很简单:通过ssh登录您的帐户并执行:
[username@webXX ~]$ ~/webapps/<webapp-name>/apache2/bin/restart
这会重新启动Web服务器并导致apache重新加载新的解释器二进制文件。
答案 2 :(得分:0)
当我将Python 2.6.5更新为2.6.8时,我也发现了相同的错误。我也从源代码构建了mod_wsgi,并且最初忘记为新版本的Python重新编译mod_wsgi,这导致了与urandom相同的错误。