Обновление Django до версии 1.9 "AppRegistryNotReady: приложения еще не загружены".

При обновлении до 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'.

32 ответа

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

import django
django.setup()

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

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

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

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

import django
django.setup()

from myapp.models import MyModel

Вышеуказанный скрипт находится в корневой папке проекта.

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

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

Я думаю, что об этом еще не упоминалось, но это частая причина ошибки: ошибка возникает, когда вы указываете код запуска, который использует модели. Если вы последуете этому подходу и поместите его в свой AppConfigвы не должны импортировать модели в верхнюю часть файла, а внутри ready()метод. Например так:

      # works as models are imported in the ready() method
from django.apps import AppConfig

class MatcherConfig(AppConfig):
    name = 'matcher'
    verbose_name = 'Match-Making'
    def ready(self):
        from matcher.background_tasks import close_timeout_games
        from matcher.models import FourPlayerGame
        # check if a player is not responding every 5 seconds
        close_timeout_games(FourPlayerGame, repeat=5)

Однако было бы неверно следующее :

      # won't work as models are imported at the beginning
from django.apps import AppConfig
from matcher.background_tasks import close_timeout_games
from matcher.models import FourPlayerGame

class MatcherConfig(AppConfig):
    name = 'matcher'
    verbose_name = 'Match-Making'
    def ready(self):
        # check if a player is not responding every 5 seconds
        close_timeout_games(FourPlayerGame, repeat=5)

Для получения дополнительной информации также см. Этот ответ.

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

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

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


Сначала импортируйте и запустите django.setup() перед импортом любых моделей.


Все приведенные выше ответы хороши, но есть простая ошибка, которую может сделать человек (на самом деле в моем случае это было).

Я импортировал модель Django из своего приложения перед вызовом django.setup(). так правильный способ сделать ...

      import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'first_project.settings')

import django
django.setup()

затем любой другой импорт, например

      from faker import Faker
import random
# import models only after calling django.setup()
from first_app.models import Webpage, Topic, AccessRecord

Для меня проблема возникла из-за того, что я импортировал приложение в 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

Вы можете получить эту ошибку, если по ошибке запустили обычную оболочку Python и пытаетесь импортировать в нее свои модели Django.

Вместо этого вы должны использовать python manage.py shell для этого.

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

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

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()

Для меня комментирование

'grappelli.dashboard',
'grappelli',

в INSTALLED_APPS работал

Я положил 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 libs еще не готовы. Поэтому я ставлю import внутри функции, и она начала работать. Функция должна быть вызвана после запуска сервера

Я получаю эту ошибку, когда пытаюсь запустить 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):
        ...

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

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

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

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

Правильный ответ здесь: /questions/45387628/obnovlenie-django-s-18-do-19-djangocoreexceptionsappregistrynotready-prilozheniya-esche-ne-zagruzhenyi/45387642#45387642

У меня были проблемы с таким вопросом, моя проблема была из-за наличия этого фрагмента кода в settings.py

импортировать myapp.models

когда я удалил этот код, исправлена ​​​​проблема, я рекомендую проверить ваш settings.py и удалить такой код

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

Причина, по которой я получил эту ошибку appregistrynotreadyэто я случайно зарегистрировался User modelвместо admin.py

Вот как это выглядело

app.py

      from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from .models import User

@admin.register(User)
class UserAdmin(BaseUserAdmin):
    pass

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

Причина этой ошибки

      django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet

заключается в том, что перед загрузкой настроек я хотел загрузить другой модуль (например, rest_framework).

Чтобы решить эту проблему, я помещаю функции в другой модуль (файл) в пакете настроек (например, common.py), и это решило проблему.

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

Как уже говорили другие, это может быть вызвано тем, что вы не установили приложение, указанное в 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

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

pip install django==1.8.18

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

Если вы столкнетесь с этой проблемой при запуске Python 3.8 и попытке использовать многопроцессорный пакет, скорее всего, это связано с тем, что обработанные подпрограммы «порождаются», а не «разветвляются». Это изменение в Python 3.8, где метод запуска процесса по умолчанию изменен с «fork» на «spawn». Это известная проблема с Django.

Чтобы обойти это:

      import multiprocessing as mp
mp.set_start_method('fork')

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

python manage.py makemigrations

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

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

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

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

      from django.urls import reverse

Решение:

      from django.urls import reverse_lazy

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

source scripts/activate

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

Я столкнулся с этой проблемой, и она была связана с asgi.py. мы загрузили следующий модуль:

      from channels.auth import AuthMiddlewareStack 

но мы не использовали его в ProtocolTypeRouter. очевидно, мы должны использовать websocket или другие протоколы, когда вызываем модуль AuthMiddlewareStack.

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

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

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

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

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

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

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

Другие вопросы по тегам