Обновление 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, но у вас не установлено это приложение на вашем компьютере. У вас есть два решения:
- Установите это приложение, используя менеджеры пакетов, такие как pip в Ubuntu.
- Или закомментируйте это установленное приложение в файле 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.
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)
Я надеюсь, что это разрешит ошибку.