Błąd aktualizacji Django do wersji 1.9 „AppRegistryNotReady: Aplikacje nie są jeszcze załadowane”.

93

Po aktualizacji do django 1.9 z 1.8 otrzymałem ten błąd. Sprawdziłem odpowiedzi na podobne pytania, ale nie sądziłem, że jest to problem z pakietami lub aplikacjami innych firm.

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.

Zmodyfikowałem zainstalowane aplikacje dla „django.contrib.auth”.

Kishore K.
źródło
1
czy używasz aplikacji innej firmy?
Udostępnij
Używam wielu aplikacji innych firm, ale uważam, że ten błąd pochodzi z „django / apps / register.py”, a nie z żadnych innych aplikacji w pakietach witryny.
Kishore K
1
Miałem podobny problem z django-crispy-forms, ponieważ ibrary nie obsługuje jeszcze wersji 1.9. Może to być nieobsługiwana aplikacja.
utkbansal
1
Nie używam tego pakietu. Przepraszam Jeśli się mylę, jeśli jest to związane z jakimikolwiek pakietami, ślad będzie wskazywał na tę aplikację w pakietach witryny, prawda?
Kishore K
Same payu nie obsługują 1.9
GrvTyagi

Odpowiedzi:

125

Spróbuj dodać te wiersze na początku pliku ustawień:

import django
django.setup()

A jeśli to nie pomoże, spróbuj po kolei usunąć aplikacje innych firm z listy zainstalowanych aplikacji.

inlanger
źródło
8
Próbowałem, ale otrzymałem ten błąd „django.core.exceptions.ImproperlyConfigured: ustawienie SECRET_KEY nie może być puste”. Mimo że mam SECRET_KEY w pliku ustawień.
Kishore K
11
Spróbuj zadeklarować SECRET_KEY PRZED wspomnianymi liniami, na przykład: SECRET_KEY = 'MY SECRET KEY' import django django.setup () zadziałało dla mnie .... teraz z kolejnym błędem :)
Duda Nogueira
1
To świetna odpowiedź na pytanie: „Jak uzyskać dostęp do obiektów modelu Django z poziomu samodzielnego skryptu?” :-) Przed uruchomieniem powyższego kodu musisz jednak zrobić: os.environ.setdefault ("DJANGO_SETTINGS_MODULE", "your.settings").
AdvilUser
1
Nie działało na ustawieniach, ale działa na moim samodzielnym skrypcie. Ten wyjątek zdarza się również, jeśli zapomnisz wywołać django.setup () w samodzielnym skrypcie Pythona. docs.djangoproject.com/en/1.10/ref/applications/ ...
André Duarte
30
django.setup()jest do użytku w samodzielnych skryptach. Nie powinieneś umieszczać tego w ustawieniach
Alasdair
37

Chciałbym napisać niestandardową funkcję w jednym z moich __init__.pyplików modeli . To powodowało błąd. Kiedy przeniosłem tę funkcję __init__.py, zadziałała.

Kishore K.
źródło
3
To samo tutaj, przeniesienie też to naprawione.
Brachamul
Warto zauważyć, że zakomentowane funkcje w tym pliku mogą również powodować ten błąd.
B-Tron z Autobotów
25

Mój problem polegał na tym, że przed wywołaniem próbowałem zaimportować model Django django.setup()

To zadziałało dla mnie:

import django
django.setup()

from myapp.models import MyModel

Powyższy skrypt znajduje się w folderze głównym projektu.

M3RS
źródło
Miałem do czynienia z tym problemem podczas uruchamiania skryptu, to go rozwiązało.
prawie początkujący
14

W moim przypadku, gdy wystąpił błąd zrobiłem python manage.py makemigrationsna Django 2.0.6.

Rozwiązaniem było uruchomienie python manage.py runserveri sprawdzenie rzeczywistego błędu (który był po prostu brakującą zmienną środowiskową).

Pavel Vergeev
źródło
13

Ten błąd może wystąpić, gdy dodajesz aplikację INSTALLED_APPS do settings.pypliku, ale nie masz tej aplikacji zainstalowanej na swoim komputerze. Masz dwa rozwiązania:

  1. Installta aplikacja używa menedżerów pakietów, takich jak pipw Ubuntu
  2. Lub Skomentuj tę zainstalowaną aplikację w settings.pypliku

Ten błąd może również wystąpić, jeśli nie jesteś w virtual environmenttym, co stworzyłeś dla swojego projektu.

Amrit
źródło
5

Spróbuj usunąć cały settings.LOGGINGdictConfig i zrestartuj serwer. Jeśli to zadziała, przepisz ustawienie zgodnie z dokumentacją v1.9.

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

pragmar
źródło
Dzięki, zadziałało. U mnie używałem plików ustawień Linuksa w systemie Windows. W związku z tym /var/logścieżka pliku dziennika nie istnieje, która spowodowała ten błąd
pratibha
5

Dla mnie problem wynikał z tego, że importowałem aplikację, w INSTALLED_APPSktórej sama importowała model w swoim __init__.pypliku

Miałem :

settings.py

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

myapp.__init__.py

from django.contrib.sites.models import Site

komentowanie import modelsw myapp.__init__.pysprawiło, że zadziałało:

# from django.contrib.sites.models import Site
Albyorix
źródło
Mam podobny problem. Ale potrzebuję importu w moim przypadku. Jak byś to zrobił?
JohnnyQ,
Zawsze możesz dokonać refaktoryzacji, aby uniknąć importowania modeli z programu init . Opcją, która na pewno działałaby, byłaby refaktoryzacja plików importujących twoją aplikację, ale mogą to być dość poważne zmiany. W końcu to właśnie musiałem zrobić!
Albyorix
Ten sam problem, co @JohnnyQ. Działa dobrze w 1.8, ale psuje się w 1.9. Czy jest gdzieś jakaś odpowiednia dokumentacja? Wyjątek wynika z importu użytkownika z django.contrib.auth.models w moim przypadku
Vinod
Zapytałem o to w osobnym pytaniu tutaj stackoverflow.com/questions/59927122/ ... i otrzymałem odpowiedź. Gist, nie ma innego wyjścia, jak tylko refaktoryzacja
Vinod
4

django.setup () na górze nie będzie działać, gdy jawnie uruchomisz skrypt. Mój problem został rozwiązany, gdy dodałem to na dole pliku ustawień

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()
Arup Barman
źródło
Używam powłoki Pycharm i typu import djangoi django.setup(). Problem został rozwiązany.
Seyed Hasan Mousavi
2

Dla mnie komentowanie

'grappelli.dashboard',
'grappelli',

w INSTALLED_APPS działało

algometrix
źródło
Dla mnie to po prostu przypadkowo miałem 'one_third_pary_app,'zamiast 'one_third_pary_app',(zwróć uwagę na pozycję ,)
J0ANMM
2

Otrzymuję ten błąd, gdy próbuję uruchomić test.py(nie pełne skrypty, nie chcę ich używać python manage.py test)

i następująca metoda działa dla mnie.

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):
        ...
Carson
źródło
1

Mój problem był następujący: django-reversion> = 1.8.7, <1.9

dla django 1.9.7 powinieneś użyć: django-reversion == 1.10.0

Zostałem zaktualizowany django-cms 3.2 do 3.3 i znalazłem to, komentując aplikacje, a następnie cofając komentarz.

Prawidłowa odpowiedź tutaj: https://stackoverflow.com/a/34040556/2837890

Anshik
źródło
1

Ten problem występuje również w przypadku niespójnych ustawień.py w przypadku nieprawidłowego pisania aplikacji INSTALLED_APPS. Sprawdź, czy poprawnie dołączono aplikacje i rozdzielono je znakami „,”.

Waykos
źródło
1

Kiedy zmieniam wersję django na 1.9, nie pojawia się błąd. pip uninstall django pip install django==1.9

Admin
źródło
1

Umieściłem Userimport do settingspliku w celu zarządzania tokenem wywołania reszty w ten sposób

# 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',
    ),
}

Ponieważ w tym momencie biblioteki Django nie są jeszcze gotowe. Dlatego włożyłem do importśrodka funkcję i zaczęło działać. Funkcję należy wywołać po uruchomieniu serwera

Thai Tran
źródło
0

W moim przypadku jedno z moich ustawień „CORS_ORIGIN_WHITELIST” zostało ustawione w pliku settings.py, ale nie było dostępne w moim pliku .env. Dlatego zasugeruję sprawdzenie ustawień, zwłaszcza tych połączonych z .env

medobills
źródło
0

Jak powiedzieli inni, może to być spowodowane tym, że nie zainstalowałeś aplikacji wymienionej w INSTALLED_APPS.

W moim przypadku manage.pypróbowałem zarejestrować wyjątek, co doprowadziło do próby jego renderowania, która nie powiodła się, ponieważ aplikacja nie została jeszcze zainicjowana. Komentowanie exceptklauzuli w manage.pywyjątku było wyświetlane bez specjalnego renderowania, co pozwoliło uniknąć mylącego błędu.

# 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
John Lehmann
źródło
0

Próbowałem wielu rzeczy, ale tylko obniżenie wersji Django do wersji 1.8.18 rozwiązało ten problem:

pip install django==1.8.18

Jest to jedna z zainstalowanych aplikacji, która nie działa, ale nie mogłem znaleźć której.

oriadam
źródło
0

Otrzymuję ten błąd, gdy próbuję uruchomić:

python manage.py makemigrations

Próbowałem tylu rzeczy i zdałem sobie sprawę, że dodałem odniesienia do „settings.py” - „INSTALLED_APPS”

Upewnij się tylko, że to, co tam piszesz, jest poprawne. Mój błąd to „.model”. zamiast „.app”.

Poprawiono ten błąd i teraz działa.

Rolka
źródło
-1

Spóźniłem się na przyjęcie, ale przyczyną mojego błędu był również grappelli. Wyszukałem kompatybilną wersję na pypi i to naprawiło to dla mnie.

lslaz
źródło
-1

Spróbuj aktywować wirtualne środowisko. W moim przypadku używając narzędzia wiersza poleceń git:

source scripts/activate

Rozwiązuje mój problem.

Stephen Mwangi Wanjohi
źródło
-1

Wystąpił ten błąd podczas próby uzyskania dostępu do obiektów modelu w 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.

Próba uzyskania dostępu Questionprzed załadowaniem klasy modelu przez aplikację spowodowała błąd.

Ojonugwa Jude Ochalifu
źródło
Czy model Questionzdefiniowany w models.py tej konfiguracji AppConfig?
Gustavo_fringe
Tak, jest tam zdefiniowane
Ojonugwa Jude Ochalifu
-2

Jeśli wypełnienie twoich plików setting.py jest poprawne , możesz spróbować dotrzeć do plików manage.py kontynuuj wywołanie danjgo.setup () w metodzie main. Następnie uruchom manage.py, w końcu ponownie uruchom projekt, problem może zniknąć.

xing liu
źródło
-2

W module „admin” pakietu aplikacji zarejestruj wszystkie bazy danych utworzone w module „modele” pakietu.

Załóżmy, że masz klasę bazy danych zdefiniowaną w module „models” jako:

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

więc musisz zarejestrować to w module administratora jako:

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

Mam nadzieję, że to rozwiąże problem.

Preetam
źródło