При обновлении Django до версии 1.9 возникает ошибка «AppRegistryNotReady: приложения еще не загружены».

93

При обновлении до django 1.9 с 1.8 я получил эту ошибку. Я проверил ответы на похожие вопросы, но не думал, что это проблема каких-либо сторонних пакетов или приложений.

Traceback (most recent call last):
File "manage.py", line 10, in <module> execute_from_command_line(sys.argv)
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line
utility.execute()
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 342, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 176, in fetch_command
commands = get_commands()
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/utils/lru_cache.py", line 100, in wrapper
result = user_function(*args, **kwds)
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 71, in get_commands
for app_config in reversed(list(apps.get_app_configs())):
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/apps/registry.py", line 137, in get_app_configs
self.check_apps_ready()
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/apps/registry.py", line 124, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

Я изменил установленные приложения для django.contrib.auth.

Кишор К.
источник
1
вы используете какое-либо стороннее приложение? Пожалуйста, поделитесь своим settings.py
utkbansal
Я использую много сторонних приложений, но считаю, что эта ошибка возникает из "django / apps / registry.py", а не из каких-либо других приложений в пакетах сайта.
Кишор К
1
Я столкнулся с аналогичной проблемой с django-crispy-forms, потому что ibrary еще не поддерживает 1.9. Так что это может быть неподдерживаемое приложение.
utkbansal
1
Я не использую этот пакет. Извините, если я ошибаюсь, если это связано с какими-либо пакетами, трассировка будет указывать на это приложение в пакетах сайта, верно?
Кишор К
Тот же payu не поддерживает 1.9
GrvTyagi

Ответы:

125

Попробуйте добавить эти строки в начало файла настроек:

import django
django.setup()

И если это не поможет, попробуйте по очереди удалить сторонние приложения из списка установленных приложений.

inlanger
источник
8
Я попробовал, но у меня возникла ошибка «django.core.exceptions.ImproperlyConfigured: параметр SECRET_KEY не должен быть пустым». Хотя у меня есть SECRET_KEY в файле настроек.
Кишор К
11
Попробуйте объявить SECRET_KEY ПЕРЕД указанными строками, например: SECRET_KEY = 'MY SECRET KEY' import django django.setup (), это сработало для меня .... теперь с другой ошибкой :)
Дуда Ногейра
1
Это отличный ответ на вопрос: «Как мне получить доступ к объектам модели Django из автономного скрипта?» :-) Перед запуском приведенного выше кода вам нужно будет сделать: os.environ.setdefault ("DJANGO_SETTINGS_MODULE", "your.settings").
AdvilUser 08
1
Не работал с настройками, но работает с моим автономным скриптом. Это исключение также происходит, если вы забыли вызвать django.setup () в автономном скрипте Python. docs.djangoproject.com/en/1.10/ref/applications/…
Андре Дуарте,
30
django.setup()предназначен для использования в автономных скриптах. Вы не должны помещать это в настройки
Alasdair
37

Я бы написал специальную функцию в одном из моих __init__.pyфайлов моделей . Это было причиной ошибки. Когда я переместил эту функцию, __init__.pyона заработала.

Кишор К.
источник
3
То же самое и здесь, его перемещение тоже исправлено.
Брахамул
Стоит отметить, что закомментированные функции в этом файле также могут вызывать эту ошибку.
B-Tron из автоботов
25

Моя проблема заключалась в том, что я пытался импортировать модель Django перед вызовом django.setup()

Это сработало для меня:

import django
django.setup()

from myapp.models import MyModel

Приведенный выше сценарий находится в корневой папке проекта.

M3RS
источник
Я столкнулся с этой проблемой при запуске скрипта, это решило ее.
почти новичок
14

В моем случае произошла ошибка , когда я сделал python manage.py makemigrationsнаDjango 2.0.6 .

Решение заключалось в том, чтобы запустить python manage.py runserverи увидеть фактическую ошибку (которая была просто отсутствующей переменной среды).

Павел Вергеев
источник
13

Эта ошибка может произойти , когда вы добавляете приложение в INSTALLED_APPS в settings.pyфайле , но вы не имеете , что приложение установлено на вашем компьютере. У вас есть два решения:

  1. Installэто приложение использует менеджеры пакетов, как pipв ubuntu
  2. Или закомментируйте это установленное приложение в settings.pyфайле

Эта ошибка также может возникнуть, если вы не в своем, virtual environmentкоторый вы, возможно, создали для своего проекта.

Амрит
источник
5

Попробуйте удалить весь settings.LOGGINGdictConfig и перезапустить сервер. Если это сработает, перепишите настройку в соответствии с документацией v1.9.

https://docs.djangoproject.com/en/1.9/topics/logging/#examples

прагматика
источник
Спасибо, сработало. Для меня я использовал установочные файлы Linux для Windows. Следовательно, /var/logсуществует путь к лог-файлу, который дал эту ошибку
пратибха
5

Для меня проблема возникла из-за того, что я импортировал приложение, в INSTALLED_APPSкотором сам импортировал модель в своем__init__.py файл.

Я имел :

settings.py

INSTALLED_APPS = [
    ...
    'myapp',
    ...
]

myapp.__init__.py

from django.contrib.sites.models import Site

закомментировать import modelsв myapp.__init__.pyсделал его работу:

# from django.contrib.sites.models import Site
Альбиорикс
источник
У меня аналогичная проблема. Но мне нужен импорт в моем случае. Как бы Вы это сделали?
JohnnyQ
Вы всегда можете выполнить рефакторинг, чтобы избежать импорта моделей из init . Вариант, который наверняка сработает, - это рефакторинг файлов, импортирующих ваше приложение, но это могут быть довольно серьезные изменения. В конце концов, это то, что мне пришлось сделать!
Albyorix
Та же проблема, что и @JohnnyQ. Работает нормально в 1.8, но ломается в 1.9. Есть ли где-нибудь соответствующая документация? Исключение возникает из-за импорта User из django.contrib.auth.models в моем случае
Vinod
Спросил об этом в отдельном вопросе здесь stackoverflow.com/questions/59927122/… и получил ответ. Суть, нет другого пути, кроме рефакторинга
Винод
4

django.setup () вверху не будет работать, пока вы явно запускаете скрипт. Моя проблема решена, когда я добавил это в конец файла настроек

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
import sys
if BASE_DIR not in sys.path:
    sys.path.append(BASE_DIR)
os.environ['DJANGO_SETTINGS_MODULE'] =  "igp_lrpe.settings"
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "igp_lrpe.settings")
import django
django.setup()
Аруп Барман
источник
Я использую PyCharm оболочки и тип import djangoи django.setup(). Проблема решена.
Сейед Хасан Мусави,
2

Для меня комментирую

'grappelli.dashboard',
'grappelli',

в INSTALLED_APPS сработало

альгометрица
источник
Для меня это было просто то, что я случайно 'one_third_pary_app,'вместо 'one_third_pary_app',(обратите внимание на положение ,)
J0ANMM
2

Я получаю эту ошибку, когда пытаюсь запустить test.py(не полные скрипты, я не хочу использовать python manage.py test)

и у меня работает следующий метод.

import os
import django
if 'env setting':
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'YourRoot.settings')
    django.setup()
from django.test import TestCase
...

class SomeTest(TestCase):
    def test_one(self):  # <-- Now, I can run this function by PyCharm
        ...

    def test_two(self):
        ...
Карсон
источник
1

Моя проблема была: django-reversion> = 1.8.7, <1.9

для django 1.9.7 вы должны использовать: django-reversion == 1.10.0

Я обновил django-cms с 3.2 до 3.3, и нашел его, комментируя приложения, а затем раскомментировав обратно.

Правильный ответ здесь: https://stackoverflow.com/a/34040556/2837890

Аншик
источник
1

Эта проблема также наблюдается для несовместимого settings.py из-за неправильной записи INSTALLED_APPS, проверьте, правильно ли вы включили приложения и разделены символом ",".

Waykos
источник
1

Когда я меняю версию django на 1.9, ошибки не возникает. pip uninstall django pip install django==1.9

админ
источник
1

Я помещаю Userимпорт в settingsфайл для управления остальным токеном вызова следующим образом

# settings.py
from django.contrib.auth.models import User
def jwt_get_username_from_payload_handler(payload):
   ....

JWT_AUTH = {
    'JWT_PAYLOAD_GET_USERNAME_HANDLER': jwt_get_username_from_payload_handler,
    'JWT_PUBLIC_KEY': PUBLIC_KEY,
    'JWT_ALGORITHM': 'RS256',
    'JWT_AUDIENCE': API_IDENTIFIER,
    'JWT_ISSUER': JWT_ISSUER,
    'JWT_AUTH_HEADER_PREFIX': 'Bearer',
}
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
       'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),
}

Потому что на данный момент библиотеки Django еще не готовы. Поэтому я вставил importфункцию внутрь и она заработала. Функцию нужно вызывать после запуска сервера

Тай Тран
источник
0

В моем случае одна из моих настроек «CORS_ORIGIN_WHITELIST» была установлена ​​в файле settings.py, но не была доступна в моем файле .env. Поэтому я предлагаю вам проверить свои настройки, особенно те, которые связаны с .env.

медобиллы
источник
0

Как говорили другие, это может быть вызвано тем, что вы не установили приложение, указанное в INSTALLED_APPS .

В моем случае manage.pyбыла попытка зарегистрировать исключение, что привело к попытке его визуализации, которая не удалась из-за того, что приложение еще не было инициализировано. Закомментировав exceptпредложение, manage.pyисключение было отображено без специального рендеринга, что позволило избежать запутанной ошибки.

# Temporarily commenting out the log statement.
#try:
    execute_from_command_line(sys.argv)
#except Exception as e:
#    log.error('Admin Command Error: %s', ' '.join(sys.argv), exc_info=sys.exc_info())
#    raise e
Джон Леманн
источник
0

Я пробовал массу вещей, но только понижение версии Django до 1.8.18 устранило эту проблему для меня:

pip install django==1.8.18

Это одно из установленных приложений, которое не работает, но я не смог найти, какое именно.

Ориадам
источник
0

Я получаю эту ошибку, когда пытаюсь запустить:

python manage.py makemigrations

я столько всего перепробовал и понял, что добавил ссылки на "settings.py" - "INSTALLED_APPS"

Просто убедитесь, что вы пишете правильно. Моя ошибка была ".model". вместо ".app."

Исправили эту ошибку, и теперь она работает.

Кастор
источник
-1

Поздно на вечеринку, но Граппелли тоже был причиной моей ошибки. Я нашел совместимую версию на pypi, и это исправило ее.

lslaz
источник
-1

Попробуйте активировать виртуальный env. В моем случае с помощью инструмента командной строки git:

source scripts/activate

Решает мою проблему.

Стивен Мванги Ванджохи
источник
-1

Получил эту ошибку при попытке доступа к объектам модели в apps.py:

class QuizConfig(AppConfig):
name = 'quiz'

def ready(self):
    print('===============> Django just started....')
    questions_by_category = Question.objects.filter(category=2) # <=== Guilty line of code.

Попытка получить доступ Questionдо того, как приложение загрузит класс модели, вызвала у меня ошибку.

Оджонугва Джуд Очалифу
источник
QuestionОпределена ли модель в models.py этого AppConfig?
Gustavo_fringe
Да, это определено там
Оджонугва Джуд Очалифу
-2

Если ваши файлы settings.py заполнены правильно , вы можете попытаться получить файлы manage.py, продолжите вызов danjgo.setup () в основном методе. Затем запустите manage.py, наконец, снова запустите проект, проблема может исчезнуть.

Син Лю
источник
-2

В модуле «admin» вашего пакета приложения зарегистрируйте все базы данных, созданные в модуле «models» пакета.

Предположим, у вас есть класс базы данных, определенный в модуле «модели» как:

class myDb1(models.Model):
    someField= models.Charfiled(max_length=100)

поэтому вы должны зарегистрировать это в модуле администратора как:

from .models import myDb1
admin.site.register(myDb1)

Надеюсь, это устранит ошибку.

Preetam
источник