Django lors de la mise à niveau vers la version 1.9, erreur "AppRegistryNotReady: les applications ne sont pas encore chargées."

93

Lors de la mise à niveau vers django 1.9 à partir de la 1.8, j'ai eu cette erreur. J'ai vérifié les réponses à des questions similaires, mais je ne pensais pas qu'il s'agissait d'un problème avec les packages ou applications tiers.

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.

J'avais modifié les applications installées pour «django.contrib.auth».

Kishore K
la source
1
utilisez-vous une application tierce? Veuillez partager votre settings.py
utkbansal
J'utilise de nombreuses applications tierces, mais je crois que cette erreur provient de "django / apps / registry.py" et non d'aucune autre application dans les packages de site.
Kishore K
1
J'ai rencontré un problème similaire avec django-crispy-forms car l'ibrary ne prend pas encore en charge la version 1.9. Cela pourrait donc être une application non prise en charge.
utkbansal
1
Je n'utilise pas ce package. Désolé si je me trompe, s'il est lié à des packages, la trace pointera vers cette application dans les packages de site, non?
Kishore K
Same payu not support 1.9
GrvTyagi

Réponses:

125

Essayez d'ajouter ces lignes en haut de votre fichier de paramètres:

import django
django.setup()

Et si cela ne vous aide pas, essayez de supprimer les applications tierces de votre liste d'applications installées une par une.

inlanger
la source
8
Je l'ai essayé, mais j'ai eu cette erreur "django.core.exceptions.ImproperlyConfigured: Le paramètre SECRET_KEY ne doit pas être vide." Même si j'ai la SECRET_KEY dans le fichier de paramètres.
Kishore K
11
Essayez de déclarer SECRET_KEY AVANT les lignes mentionnées, quelque chose comme: SECRET_KEY = 'MY SECRET KEY' import django django.setup () cela a fonctionné pour moi .... maintenant avec une autre erreur :)
Duda Nogueira
1
C'est une excellente réponse à la question: "Comment puis-je accéder aux objets de modèle Django à partir d'un script autonome?" :-) Avant d'exécuter le code ci-dessus, vous devrez faire: os.environ.setdefault ("DJANGO_SETTINGS_MODULE", "your.settings") cependant.
AdvilUser
1
N'a pas fonctionné sur les paramètres mais fonctionne sur mon script autonome. Cette exception se produit également si vous oubliez d'appeler django.setup () dans un script Python autonome. docs.djangoproject.com/en/1.10/ref/applications/…
André Duarte
30
django.setup()est destiné à être utilisé dans des scripts autonomes. Vous ne devriez pas le mettre dans les paramètres
Alasdair
37

J'aurais une fonction personnalisée écrite sur l'un de mes __init__.pyfichiers de modèles . Cela causait l'erreur. Lorsque j'ai déplacé cette fonction, __init__.pycela fonctionnait.

Kishore K
la source
3
Même chose ici, le déplacer a également été corrigé.
Brachamul
Il convient de noter que les fonctions commentées dans ce fichier peuvent également provoquer cette erreur.
B-Tron des Autobots
25

Mon problème était que j'ai essayé d'importer un modèle Django avant d'appeler django.setup()

Cela a fonctionné pour moi:

import django
django.setup()

from myapp.models import MyModel

Le script ci-dessus se trouve dans le dossier racine du projet.

M3RS
la source
J'étais confronté à ce problème lors de l'exécution d'un script, cela l'a résolu.
presque un débutant
14

Dans mon cas, l'erreur s'est produite lorsque j'ai fait python manage.py makemigrationssur Django 2.0.6.

La solution était d'exécuter python manage.py runserveret de voir l'erreur réelle (qui n'était qu'une variable d'environnement manquante).

Pavel Vergeev
la source
13

Cette erreur peut se produire lorsque vous ajoutez une application dans INSTALLED_APPS le settings.pyfichier mais que cette application n'est pas installée sur votre ordinateur. Vous avez deux solutions:

  1. Installcette application utilisant des gestionnaires de packages comme pipdans ubuntu
  2. Ou commentez cette application installée dans le settings.pyfichier

Cette erreur peut également survenir si vous n'êtes pas dans votre virtual environmentque vous avez peut-être créé pour votre projet.

Amrit
la source
5

Essayez de supprimer l'intégralité de settings.LOGGINGdictConfig et redémarrez le serveur. Si cela fonctionne, réécrivez le paramètre conformément à la documentation v1.9.

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

pragmar
la source
Merci, cela a fonctionné. Pour moi, j'utilisais des fichiers de configuration de Linux sur Windows. D'où l' /var/logabsence de chemin de fichier journal qui a donné cette erreur
pratibha
5

Pour moi, le problème venait du fait que j'importais une application dans INSTALLED_APPSlaquelle importait elle-même un modèle dans son __init__.pyfichier

J'avais :

settings.py

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

myapp.__init__.py

from django.contrib.sites.models import Site

commenter import modelsen myapp.__init__.pyfait fonctionner:

# from django.contrib.sites.models import Site
Albyorix
la source
J'ai le même problème. Mais j'ai besoin de l'importation dans mon cas. Comment feriez-vous cela?
JohnnyQ
Vous pouvez toujours refactoriser pour éviter d'importer des modèles depuis init . Une option qui fonctionnerait à coup sûr serait de refactoriser les fichiers important votre application, mais il pourrait s'agir de modifications assez importantes. Au final, c'est ce que j'avais à faire!
Albyorix
Même problème que @JohnnyQ. Fonctionne bien en 1.8 mais casse en 1.9. Y a-t-il une documentation pertinente quelque part? L'exception se produit en raison de l'importation de l'utilisateur de django.contrib.auth.models dans mon cas
Vinod
J'avais posé des questions à ce sujet dans une question distincte ici stackoverflow.com/questions/59927122/… et j'ai obtenu la réponse. Gist, pas d'autre moyen que de refactoriser
Vinod
4

django.setup () en haut ne fonctionnera pas pendant que vous exécutez un script explicitement. Mon problème a été résolu lorsque j'ai ajouté ceci au bas du fichier de paramètres

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
la source
J'utilise le shell Pycharm et le type import djangoet django.setup(). Le problème a été résolu.
Seyed Hasan Mousavi le
2

Pour moi commenter

'grappelli.dashboard',
'grappelli',

dans INSTALLED_APPS travaillé

algométrix
la source
Pour moi, c'était juste que j'avais accidentellement 'one_third_pary_app,'au lieu de 'one_third_pary_app',(notez la position du ,)
J0ANMM
2

J'obtiens cette erreur lorsque j'essaye d'exécuter test.py(pas de scripts complets, je ne veux pas utiliser python manage.py test)

et la méthode suivante fonctionne pour moi.

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
la source
1

Mon problème était: django-reversion> = 1.8.7, <1.9

pour django 1.9.7 vous devriez utiliser: django-reversion == 1.10.0

J'ai été mis à jour django-cms 3.2 vers 3.3, et je l'ai trouvé en commentant les applications, puis en décommentant.

Bonne réponse ici: https://stackoverflow.com/a/34040556/2837890

Anshik
la source
1

Ce problème est également observé pour les paramètres incohérents.py pour une écriture incorrecte de INSTALLED_APPS, vérifiez si vous avez correctement inclus les applications et séparées par ",".

Waykos
la source
1

Quand je change ma version de django en 1.9, il ne se produit pas l'erreur. pip uninstall django pip install django==1.9

admin
la source
1

J'ai mis l' Userimportation dans le settingsfichier pour gérer le jeton d'appel reste comme celui-ci

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

Parce qu'à ce moment-là, les bibliothèques Django ne sont pas encore prêtes. Par conséquent, j'ai mis la importfonction à l' intérieur et cela a commencé à fonctionner. La fonction doit être appelée après le démarrage du serveur

Thai Tran
la source
0

Dans mon cas, l'un de mes paramètres, «CORS_ORIGIN_WHITELIST» a été défini dans le fichier settings.py mais n'était pas disponible dans mon fichier .env. Je vous suggère donc de vérifier vos paramètres, en particulier ceux liés à .env

medobills
la source
0

Comme d'autres l'ont dit, cela peut être dû au fait que vous n'avez pas installé une application répertoriée dans INSTALLED_APPS.

Dans mon cas, j'ai manage.pytenté de consigner l'exception, ce qui a conduit à une tentative de rendu qui a échoué car l'application n'est pas encore initialisée. En commentant la exceptclause dans manage.pyl'exception a été affichée sans rendu spécial, évitant ainsi l'erreur déroutante.

# 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
la source
0

J'ai essayé des tonnes de choses, mais seule la rétrogradation de Django vers la version 1.8.18 a résolu ce problème pour moi:

pip install django==1.8.18

C'est l'une des applications installées qui échoue, mais je n'ai pas pu trouver laquelle.

oriadam
la source
0

J'obtiens cette erreur lorsque j'essaye de courir:

python manage.py makemigrations

j'ai essayé tellement de choses et j'ai réalisé que j'avais ajouté des références à "settings.py" - "INSTALLED_APPS"

Assurez-vous simplement que ce que vous écrivez est correct. Mon erreur était ".model". au lieu de ".app."

Correction de cette erreur et ça marche maintenant.

Castor
la source
-1

Tard à la fête, mais grappelli était aussi la raison de mon erreur. J'ai recherché la version compatible sur pypi et cela m'a corrigé.

lslaz
la source
-1

Essayez d'activer l'environnement virtuel. Dans mon cas, en utilisant l'outil de ligne de commande git:

source scripts/activate

Résout mon problème.

Stephen Mwangi Wanjohi
la source
-1

Vous avez cette erreur en essayant d'accéder aux objets de modèle dans 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.

Essayer d'accéder Questionavant que l'application n'ait chargé la classe de modèle a causé l'erreur pour moi.

Ojonugwa Jude Ochalifu
la source
Le modèle Questiondéfini dans le models.py de cette AppConfig?
Gustavo_fringe
Oui, il y est défini
Ojonugwa Jude Ochalifu
-2

Si votre remplissage de fichiers setting.py est correct, vous pouvez essayer d'arriver aux fichiers manage.py, appelez danjgo.setup () dans la méthode principale. Ensuite, exécutez manage.py, enfin exécutez à nouveau le projet, le problème pourrait disparaître.

xing liu
la source
-2

Dans le module "admin" de votre package d'application, enregistrez toutes les bases de données créées dans le module "models" du package.

Supposons que vous ayez une classe de base de données définie dans le module "models" comme:

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

vous devez donc l'enregistrer dans le module d'administration en tant que:

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

J'espère que cela résoudra l'erreur.

Prétam
la source