Назад | Перейти на главную страницу

Django 1.10.3 Apache wsgi - ImportError: невозможно импортировать сигналы имен

В одночасье django перестал работать, возможно, из-за автоматического обновления пакета на сервере. Его сценарий wsgi теперь не загружается в производственной среде, но сервер разработки работает нормально. Что может вызвать следующую ошибку?

mod_wsgi (pid=27634): Target WSGI script '/var/www/.../wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=27634): Exception occurred processing WSGI script '/var/www/.../wsgi.py'.
Traceback (most recent call last):
  File "/var/www/.../wsgi.py", line 13, in <module>
 from django.core.wsgi import get_wsgi_application
  File "/usr/local/lib/python2.7/dist-packages/django/core/wsgi.py", line 2, in <module>
 from django.core.handlers.wsgi import WSGIHandler
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 10, in <module>
 from django import http
  File "/usr/local/lib/python2.7/dist-packages/django/http/__init__.py", line 5, in <module>
 from django.http.response import (
  File "/usr/local/lib/python2.7/dist-packages/django/http/response.py", line 13, in <module>
 from django.core.serializers.json import DjangoJSONEncoder
  File "/usr/local/lib/python2.7/dist-packages/django/core/serializers/__init__.py", line 23, in <module>
 from django.core.serializers.base import SerializerDoesNotExist
  File "/usr/local/lib/python2.7/dist-packages/django/core/serializers/base.py", line 4, in <module>
 from django.db import models
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/__init__.py", line 4, in <module>
 from django.db.models import signals  # NOQA
ImportError: cannot import name signals

Файл wsgi.py выглядит следующим образом:

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

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Это работало 24 часа назад и перестало работать - я пробовал django 1.10 и 1.10.3, но оба проявляют те же симптомы. apache 2.4.18, python 2.7.12.

Файл /usr/local/lib/python2.7/dist-packages/django/db/models/signals.py существует, поэтому в принципе ничего не должно останавливать импорт.

Оказывается, был файл, который не мог прочитать веб-сервер, и более ранняя строка в журнале ошибок идентифицировала этот файл.

IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/protobuf-3.1.0.post1-py2.7.egg/EGG-INFO/namespace_packages.txt'

Решил проблему с помощью:

chmod -R o+r /usr/local/lib/python2.7/dist-packages

Оставляем этот вопрос на тот случай, если кто-то столкнется с той же проблемой.