Django atualizando para 1.9 erro “AppRegistryNotReady: Apps não carregados ainda.”

97

Quando atualizei para django 1.9 de 1.8, recebi este erro. Verifiquei as respostas para perguntas semelhantes, mas não acho que isso seja um problema com nenhum pacote ou aplicativo de terceiros.

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.

Eu modifiquei os aplicativos instalados para 'django.contrib.auth'.

Kishore K
fonte
1
você está usando algum aplicativo de terceiros? Compartilhe seu settings.py
utkbansal
Estou usando muitos aplicativos de terceiros, mas acredito que esse erro seja gerado em "django / apps / registry.py" e não em nenhum outro aplicativo nos pacotes do site.
Kishore K
1
Eu enfrentei um problema semelhante com django-crispy-forms porque a ibrary ainda não oferece suporte a 1.9. Portanto, este pode ser um aplicativo sem suporte.
utkbansal
1
Não estou usando esse pacote. Desculpe Se eu estiver errado, se for relacionado a algum pacote, o trace estará apontando para aquele aplicativo nos pacotes do site, certo?
Kishore K
Mesmo payu não é compatível com 1.9
GrvTyagi

Respostas:

127

Tente adicionar estas linhas ao topo do seu arquivo de configurações:

import django
django.setup()

E se isso não ajudar, tente remover aplicativos de terceiros de sua lista de aplicativos instalados, um por um.

inlanger
fonte
8
Eu tentei, mas recebi este erro "django.core.exceptions.ImproperlyConfigured: A configuração SECRET_KEY não deve estar vazia." Mesmo que eu tenha o SECRET_KEY no arquivo de configurações.
Kishore K
11
Tente declarar a SECRET_KEY ANTES das linhas mencionadas, algo como: SECRET_KEY = 'MY SECRET KEY' import django django.setup () funcionou para mim .... agora com outro erro :)
Duda Nogueira
1
Esta é uma ótima resposta à pergunta: "Como eu acesso os objetos de modelo do Django a partir de um script independente?" :-) Antes de executar o código acima, você precisará fazer: os.environ.setdefault ("DJANGO_SETTINGS_MODULE", "your.settings").
AdvilUser
1
Não funcionou nas configurações, mas funciona no meu script autônomo. Essa exceção também acontece se você esquecer de chamar django.setup () em um script Python independente. docs.djangoproject.com/en/1.10/ref/applications/…
André Duarte
30
django.setup()é para uso em scripts independentes. Você não deve colocá-lo em configurações
Alasdair
38

Eu teria uma função personalizada escrita em um dos meus __init__.pyarquivos de modelos . Isso estava causando o erro. Quando movi esta função __init__.pyfuncionou.

Kishore K
fonte
3
O mesmo aqui, movendo-o fixo também.
Brachamul
É importante notar que as funções comentadas neste arquivo também podem causar esse erro.
B-Tron dos Autobots
25

Meu problema é que tentei importar um modelo Django antes de chamar django.setup()

Isso funcionou para mim:

import django
django.setup()

from myapp.models import MyModel

O script acima está na pasta raiz do projeto.

M3RS
fonte
Eu estava enfrentando esse problema ao executar um script, isso resolveu.
quase um iniciante
14

No meu caso, o erro ocorreu quando cometi python manage.py makemigrationsemDjango 2.0.6 .

A solução era executar python manage.py runservere ver o erro real (que era apenas uma variável de ambiente ausente).

Pavel Vergeev
fonte
13

Este erro pode ocorrer quando você está adicionando um aplicativo em INSTALLED_APPS no settings.pyarquivo, mas você não tem esse aplicativo instalado em seu computador. Você tem duas soluções:

  1. Install aquele aplicativo usando gerenciadores de pacotes como pip no Ubuntu
  2. Ou comente esse aplicativo instalado no settings.pyarquivo

Este erro também pode ocorrer se você não estiver na pasta virtual environmentque pode ter criado para o seu projeto.

Amrit
fonte
5

Tente remover todo o settings.LOGGINGdictConfig e reinicie o servidor. Se funcionar, reescreva a configuração de acordo com a documentação v1.9.

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

pragmar
fonte
Obrigado, funcionou. Para mim eu estava usando arquivos de configuração do linux no windows. Portanto, /var/logexiste o caminho do arquivo de log que deu esse erro
pratibha
5

Para mim, o problema vinha do fato de eu estar importando um aplicativo no INSTALLED_APPSqual ele próprio importava um modelo em seu__init__.py arquivo

Eu tinha :

settings.py

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

myapp.__init__.py

from django.contrib.sites.models import Site

comentar import modelsem myapp.__init__.pyfez funcionar:

# from django.contrib.sites.models import Site
Albyorix
fonte
Eu tenho um problema semelhante. Mas preciso importar no meu caso. Como você faria isso?
JohnnyQ
Você sempre pode refatorar para evitar a importação de modelos do init . Uma opção que funcionaria com certeza seria refatorar os arquivos que importam seu aplicativo, mas pode haver mudanças bastante pesadas. No final das contas, foi o que eu tive que fazer!
Albyorix
Mesmo problema que @JohnnyQ. Funciona bem no 1.8, mas quebra no 1.9. Existe alguma documentação relevante em algum lugar? A exceção surge devido à importação de User de django.contrib.auth.models no meu caso
Vinod
Perguntou sobre isso em uma pergunta separada aqui stackoverflow.com/questions/59927122/… e obteve a resposta. Síntese, nenhuma outra maneira a não ser refatorar
Vinod
4

django.setup () no topo não funcionará enquanto você estiver executando um script explicitamente. Meu problema foi resolvido quando adicionei isso na parte inferior do arquivo de configurações

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
fonte
Eu uso o shell Pycharm e digite import djangoe django.setup(). O problema foi resolvido.
Seyed Hasan Mousavi
3

Para mim comentando

'grappelli.dashboard',
'grappelli',

em INSTALLED_APPS funcionou

algometrix
fonte
Para mim foi apenas que eu acidentalmente tive em 'one_third_pary_app,'vez de 'one_third_pary_app',(observe a posição do ,)
J0ANMM
2

Recebo esse erro quando tento executar test.py(scripts não completos, não quero usar python manage.py test)

e o método a seguir está funcionando para mim.

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
fonte
Supondo que DJANGO_SETTINGS_MODULEesteja definido, há 2 linhas importantes de código nesta resposta; import djangoe django.setup(). Se alguém está usando objetos de um projeto django em um script python único dentro do projeto, o escopo desse script provavelmente não tem acesso ao projeto django. Ao chamar as linhas acima mencionadas, você essencialmente informa ao script sobre o conteúdo do seu projeto django. Quando preciso chamá-los, simplesmente os adiciono ao início do script antes de qualquer outra importação.
AdamY
1

Meu problema era: django-reversion> = 1.8.7, <1.9

para django 1.9.7 você deve usar: django-reversion == 1.10.0

Fui atualizado django-cms 3.2 para 3.3 e descobri-o comentando aplicativos e, em seguida, removendo o comentário de volta.

Resposta correta aqui: https://stackoverflow.com/a/34040556/2837890

Anshik
fonte
1

Esse problema também é observado para configurações inconsistentes.py para escrever incorretamente INSTALLED_APPS, verifique se você incluiu aplicativos corretamente e separados por ",".

Waykos
fonte
1

Quando mudo minha versão do django para 1.9, não surge o erro. pip uninstall django pip install django==1.9

admin
fonte
1

Eu coloquei a Userimportação no settingsarquivo para gerenciar o token de chamada restante como este

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

Porque naquele momento, as bibliotecas do Django ainda não estão prontas. Portanto, coloquei o importdentro da função e começou a funcionar. A função precisa ser chamada após o servidor ser iniciado

Thai Tran
fonte
0

No meu caso, uma das minhas configurações, 'CORS_ORIGIN_WHITELIST', foi definida no arquivo settings.py, mas não estava disponível no meu arquivo .env. Portanto, sugiro que você verifique suas configurações, especialmente aquelas vinculadas a .env

medobills
fonte
0

Como outros já disseram, isso pode ser causado quando você não instalou um aplicativo listado em INSTALLED_APPS .

No meu caso, manage.pyestava tentando registrar a exceção, o que levou a uma tentativa de renderizá-la, que falhou devido ao aplicativo ainda não ter sido inicializado. Ao comentar a exceptcláusula na manage.pyexceção foi exibida sem renderização especial, evitando o erro confuso.

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

Eu tentei várias coisas, mas apenas o downgrade do Django para 1.8.18 resolveu este problema para mim:

pip install django==1.8.18

É um dos aplicativos instalados que está falhando, mas não consegui encontrar qual deles.

Oriadam
fonte
0

Eu recebo esse erro quando tento executar:

python manage.py makemigrations

Eu tentei tantas coisas e percebi que adicionei algumas referências a "settings.py" - "INSTALLED_APPS"

Apenas certifique-se de que o que você escreve está correto. Meu erro foi ".modelo". em vez de ".app."

Corrigido esse erro e está funcionando agora.

rícino
fonte
0

Primeiro importe e execute django.setup () antes de importar qualquer modelo


Todas as respostas acima são boas, mas há um erro simples que uma pessoa pode cometer (na verdade, no meu caso era).

Importei o modelo Django do meu aplicativo antes de ligar django.setup(). a maneira correta é fazer ...

import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'first_project.settings')

import django
django.setup()

então qualquer outra importação como

from faker import Faker
import random
# import models only after calling django.setup()
from first_app.models import Webpage, Topic, AccessRecord
Himanshu Patel
fonte
-1

Atrasado para a festa, mas grappelli foi o motivo do meu erro também. Eu procurei a versão compatível no pypi e isso consertou para mim.

lslaz
fonte
-1

Tente ativar o ambiente virtual. No meu caso, usando a ferramenta de linha de comando git:

source scripts/activate

Resolve meu problema.

Stephen Mwangi Wanjohi
fonte
-1

Recebi este erro ao tentar acessar objetos de modelo em 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.

Tentar acessar Questionantes de o aplicativo carregar a classe de modelo causou o erro para mim.

Ojonugwa Jude Ochalifu
fonte
O modelo Questiondefinido no models.py deste AppConfig?
Gustavo_fringe
Sim, está definido lá
Ojonugwa Jude Ochalifu
-2

Se o preenchimento de seus arquivos setting.py estiver correto, você pode tentar chegar aos arquivos manage.py, proceder com a chamada danjgo.setup () no método principal. Em seguida, execute manage.py e, finalmente, execute novamente o projeto, o problema pode desaparecer.

xing liu
fonte
-2

No módulo "admin" do pacote do seu aplicativo, registre todos os bancos de dados criados no módulo "modelos" do pacote.

Suponha que você tenha uma classe de banco de dados definida no módulo "modelos" como:

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

então você deve registrar isso no módulo de administração como:

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

Espero que isso resolva o erro.

Preetam
fonte