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”.


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.


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.


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.


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ą).


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.



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

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

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


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):
        ...

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


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 „,”.


1

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


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


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


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

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.


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.


-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.


-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.


-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.


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ąć.


-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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.