Django-Upgrade auf 1.9 Fehler "AppRegistryNotReady: Apps sind noch nicht geladen."

87

Beim Upgrade von 1.8 auf Django 1.9 ist dieser Fehler aufgetreten. Ich habe die Antworten auf ähnliche Fragen überprüft, aber ich dachte nicht, dass dies ein Problem mit Paketen oder Apps von Drittanbietern ist.

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.

Ich habe die installierten Apps für 'django.contrib.auth' geändert.

Kishore K.
quelle
1
Verwenden Sie eine Drittanbieter-App? Bitte teilen Sie Ihre settings.py
utkbansal
Ich verwende viele Apps von Drittanbietern, aber ich glaube, dieser Fehler wird von "django / apps / registry.py" und nicht von anderen Apps in Site-Paketen ausgelöst.
Kishore K
1
Ich habe ein ähnliches Problem mit Django-Crispy-Formen gehabt, weil die Bibliothek 1.9 noch nicht unterstützt. Dies könnte also eine nicht unterstützte App sein.
Utkbansal
1
Ich benutze dieses Paket nicht. Entschuldigung Wenn ich mich irre, wenn es sich um Pakete handelt, zeigt der Trace in Site-Paketen auf diese App, oder?
Kishore K
Gleiche Payu nicht unterstützen 1.9
GrvTyagi

Antworten:

117

Versuchen Sie, diese Zeilen oben in Ihre Einstellungsdatei einzufügen:

import django
django.setup()

Und wenn dies nicht hilft, versuchen Sie, Anwendungen von Drittanbietern einzeln aus der Liste der installierten Apps zu entfernen.

Inlanger
quelle
8
Ich habe es versucht, aber ich habe den Fehler "django.core.exceptions.ImproperlyConfigured: Die Einstellung SECRET_KEY darf nicht leer sein." Obwohl ich den SECRET_KEY in der Einstellungsdatei habe.
Kishore K
11
Versuchen Sie, den SECRET_KEY VOR den genannten Zeilen zu deklarieren , etwa wie folgt: SECRET_KEY = 'MY SECRET KEY' import django django.setup () es hat bei mir funktioniert .... jetzt mit einem anderen Fehler :)
Duda Nogueira
Dies ist eine gute Antwort auf die Frage: "Wie greife ich über ein eigenständiges Skript auf Django-Modellobjekte zu?" :-) Bevor Sie den obigen Code ausführen, müssen Sie Folgendes tun: os.environ.setdefault ("DJANGO_SETTINGS_MODULE", "your.settings").
AdvilUser
1
Hat nicht an Einstellungen gearbeitet, funktioniert aber an meinem eigenständigen Skript. Diese Ausnahme tritt auch auf, wenn Sie vergessen, django.setup () in einem eigenständigen Python-Skript aufzurufen. docs.djangoproject.com/de/1.10/ref/applications/…
André Duarte
28
django.setup()ist für die Verwendung in eigenständigen Skripten vorgesehen. Sie sollten es nicht in Einstellungen setzen
Alasdair
35

Ich hätte eine benutzerdefinierte Funktion in eine meiner __init__.pyModelldateien geschrieben. Es hat den Fehler verursacht. Als ich diese Funktion verschoben habe, hat __init__.pyes funktioniert.

Kishore K.
quelle
2
Gleiches gilt hier auch für das Verschieben.
Brachamul
Beachten Sie, dass auskommentierte Funktionen in dieser Datei ebenfalls diesen Fehler verursachen können.
B-Tron der Autobots
23

Mein Problem war, dass ich vor dem Aufruf versucht habe, ein Django-Modell zu importieren django.setup()

Das hat bei mir funktioniert:

import django
django.setup()

from myapp.models import MyModel

Das obige Skript befindet sich im Projektstammordner.

M3RS
quelle
Ich hatte dieses Problem beim Ausführen eines Skripts. Dadurch wurde es behoben.
Fast ein Anfänger
14

In meinem Fall war der Fehler aufgetreten , als ich gemacht python manage.py makemigrationsauf Django 2.0.6.

Die Lösung bestand darin, python manage.py runserverden tatsächlichen Fehler (der nur eine fehlende Umgebungsvariable war) auszuführen und anzuzeigen.

Pavel Vergeev
quelle
12

Dieser Fehler kann auftreten, wenn Sie eine App INSTALLED_APPS zur settings.pyDatei hinzufügen, diese App jedoch nicht auf Ihrem Computer installiert ist. Sie haben zwei Lösungen:

  1. Installdiese App mit Paketmanagern wie pipin Ubuntu
  2. Oder Kommentieren Sie die installierte App in der settings.pyDatei aus

Dieser Fehler kann auch auftreten, wenn Sie sich nicht in Ihrem befinden, virtual environmentden Sie möglicherweise für Ihr Projekt erstellt haben.

Amrit
quelle
5

Entfernen Sie die gesamte settings.LOGGINGdictConfig und starten Sie den Server neu. Wenn dies funktioniert, schreiben Sie die Einstellung gemäß der Dokumentation zu Version 1.1 neu.

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

Pragmar
quelle
Danke, es hat funktioniert. Für mich habe ich Einstellungsdateien von Linux unter Windows verwendet. Daher /var/loggibt es
keinen Protokolldateipfad
5

Für mich kam das Problem von der Tatsache, dass ich eine App importierte, in INSTALLED_APPSdie selbst ein Modell in seine __init__.pyDatei importiert wurde

Ich hatte :

settings.py

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

myapp.__init__.py

from django.contrib.sites.models import Site

Auskommentieren import modelsin myapp.__init__.pyhat es funktioniert:

# from django.contrib.sites.models import Site
Albyorix
quelle
Ich habe das ähnliche Problem. Aber ich brauche den Import in meinem Fall. Wie würdest du das machen?
JohnnyQ
Sie können jederzeit umgestalten, um den Import von Modellen aus init zu vermeiden . Eine Option, die sicher funktionieren würde, wäre, die Dateien, die Ihre App importieren, umzugestalten, aber es könnten ziemlich schwere Änderungen sein. Am Ende war es das, was ich tun musste!
Albyorix
Gleiches Problem wie @JohnnyQ. Funktioniert gut in 1.8, bricht aber in 1.9. Gibt es irgendwo relevante Unterlagen? Die Ausnahme ergibt sich aus dem Import des Benutzers aus django.contrib.auth.models in meinem Fall
Vinod
Hatte dies in einer separaten Frage hier gestapelt stackoverflow.com/questions/59927122/… und bekam die Antwort. Gist, kein anderer Weg als Refactor
Vinod
4

django.setup () oben funktioniert nicht, während Sie ein Skript explizit ausführen. Mein Problem wurde behoben, als ich es unten in der Einstellungsdatei hinzufügte

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 Barmann
quelle
Ich benutze Pycharm Shell und tippe import djangound django.setup(). Das Problem ist gelöst worden.
Seyed Hasan Mousavi
2

Für mich auskommentieren

'grappelli.dashboard',
'grappelli',

in INSTALLED_APPS funktioniert

Algometrix
quelle
Für mich war es nur so, dass ich versehentlich 'one_third_pary_app,'statt 'one_third_pary_app',(beachten Sie die Position der ,)
J0ANMM
2

Ich erhalte diesen Fehler, wenn ich versuche auszuführen test.py(keine vollständigen Skripte, die ich nicht verwenden möchte python manage.py test)

und die folgende Methode funktioniert für mich.

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
quelle
Ihre Antwort funktioniert für mich. Danke.
Vikas Thakur
1

Mein Problem war: Django-Reversion> = 1.8.7, <1.9

Für Django 1.9.7 sollten Sie Folgendes verwenden: django-reversion == 1.10.0

Ich wurde auf django-cms 3.2 auf 3.3 aktualisiert und fand es, indem ich Apps kommentierte und dann wieder auskommentierte.

Richtige Antwort hier: https://stackoverflow.com/a/34040556/2837890

Anshik
quelle
1

Dieses Problem tritt auch bei inkonsistenten settings.py auf, wenn INSTALLED_APPS falsch geschrieben wurde. Überprüfen Sie, ob Sie Apps korrekt eingefügt und mit "," getrennt haben.

Waykos
quelle
1

Wenn ich meine Django-Version auf 1.9 ändere, tritt der Fehler nicht auf. pip uninstall django pip install django==1.9

Administrator
quelle
1

Ich habe den UserImport in die settingsDatei eingefügt, um das Rest-Call-Token wie folgt zu verwalten

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

Denn in diesem Moment sind die Django-Bibliotheken noch nicht fertig. Deshalb habe ich das importInnere der Funktion eingefügt und es fing an zu funktionieren. Die Funktion muss nach dem Start des Servers aufgerufen werden

Thai Tran
quelle
0

In meinem Fall wurde eine meiner Einstellungen, 'CORS_ORIGIN_WHITELIST', in der Datei settings.py festgelegt, war jedoch in meiner ENV-Datei nicht verfügbar. Daher schlage ich vor, dass Sie Ihre Einstellungen überprüfen, insbesondere die mit .env verknüpften

Medobills
quelle
0

Wie andere gesagt haben, kann dies verursacht werden, wenn Sie keine App installiert haben, die in aufgeführt ist INSTALLED_APPS.

In meinem Fall manage.pywurde versucht, die Ausnahme zu protokollieren, was zu einem Versuch führte, sie zu rendern, der fehlschlug, weil die App noch nicht initialisiert wurde. Durch Auskommentieren wurde die exceptKlausel in manage.pyder Ausnahme ohne spezielles Rendering angezeigt, um den verwirrenden Fehler zu vermeiden.

# 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
quelle
0

Ich habe unzählige Dinge ausprobiert, aber nur ein Downgrade von Django auf 1.8.18 hat dieses Problem für mich behoben:

pip install django==1.8.18

Es ist eine der installierten Apps, die fehlschlägt, aber ich konnte nicht finden, welche.

Oriadam
quelle
0

Beim Versuch, auf Modellobjekte zuzugreifen, ist folgende Fehlermeldung aufgetreten 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.

Der Versuch, auf den Zugriff zuzugreifen, Questionbevor die App die Modellklasse geladen hat, hat den Fehler für mich verursacht.

Ojonugwa Jude Ochalifu
quelle
Ist das Modell Questionin der models.py dieser AppConfig definiert?
Gustavo_fringe
Ja, es ist dort definiert
Ojonugwa Jude Ochalifu
0

Ich erhalte diesen Fehler, wenn ich versuche auszuführen:

python manage.py makemigrations

Ich habe so viele Dinge ausprobiert und festgestellt, dass ich einige Verweise auf "settings.py" - "INSTALLED_APPS" hinzugefügt habe.

Stellen Sie nur sicher, dass das, was Sie dort schreiben, korrekt ist. Mein Fehler war ".model". anstelle von ".app."

Dieser Fehler wurde behoben und es funktioniert jetzt.

Rolle
quelle
-1

Spät zur Party, aber Grappelli war auch der Grund für meinen Fehler. Ich habe die kompatible Version auf pypi nachgeschlagen und das hat es für mich behoben.

lslaz
quelle
-1

Versuchen Sie, die virtuelle Umgebung zu aktivieren. In meinem Fall mit dem Git-Befehlszeilentool:

source scripts/activate

Löst mein Problem.

Stephen Mwangi Wanjohi
quelle
-2

Wenn die Füllung Ihrer Datei "settings.py" korrekt ist, können Sie versuchen, die Datei "manage.py" zu erreichen. Rufen Sie danjgo.setup () in der Hauptmethode auf. Führen Sie dann manage.py aus, und führen Sie schließlich erneut project aus. Das Problem könnte verschwinden.

xing liu
quelle
-2

Registrieren Sie im Modul "admin" Ihres App-Pakets alle Datenbanken, die im Modul "models" des Pakets erstellt wurden.

Angenommen, Sie haben eine Datenbankklasse, die im Modul "Modelle" definiert ist als:

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

Sie müssen dies also im Admin-Modul registrieren als:

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

Ich hoffe das behebt den Fehler.

Preetam
quelle