Django 升级到1.9错误“ AppRegistryNotReady: 应用程序尚未加载。”

当从1.8升级到 django 1.9时,我得到了这个错误。我查看了类似问题的答案,但我不认为这是任何第三方软件包或应用程序的问题。

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.

我已经修改了“ django.Contrib.auth”的已安装应用程序。

195386 次浏览

尝试将以下行添加到设置文件的顶部:

import django
django.setup()

如果这不能帮助您尝试从您安装的应用程序列表中一个一个地删除第三方应用程序。

我有一个自定义函数写在我的一个模型 __init__.py文件。是它导致了错误。当我从 __init__.py移动这个函数时,它工作了。

尝试删除整个 settings.LOGGING dictConfig 并重新启动服务器。如果可行,根据 v1.9文档重写设置。

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

让我发表评论

'grappelli.dashboard',
'grappelli',

在 INSTALLED _ APPS 中工作

我的问题是: Django-reversion > = 1.8.7,< 1.9

对于 django 1.9.7,您应该使用: Django-reversion = = 1.10.0

我升级了 django-cms 3.2到3.3,通过评论应用找到它,然后删除回来。

这里的正确答案是: Https://stackoverflow.com/a/34040556/2837890

当您在 settings.py文件中的 INSTALLED_APPS中添加应用程序时,可能会发生此错误,但是您的计算机中没有安装该应用程序。你有两个解决办法:

  1. 在 ubuntu 中使用像 pip这样的软件包管理器的应用程序
  2. 或者在 settings.py文件中注释掉已安装的应用程序

如果您不在为项目创建的 virtual environment中,也可能出现此错误。

这个问题也会出现在不一致的设置.py 中,因为它错误地编写了 INSTALLED _ APPS,请验证是否正确地包含了应用程序并以“ ,”分隔。

如果 seting.py 文件填充是正确的,您可以尝试到达 manage.py 文件,然后在 main 方法中调用 danjgo.setup ()。然后运行 manage.py,最后再次运行 project,问题就可以消失了。

在应用程序包的“管理”模块中,注册包的“模型”模块中创建的所有数据库。

假设在“ model”模块中定义了一个数据库类:

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

因此,您必须在管理模块中将其注册为:

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

我希望这能解决这个错误。

对我来说,问题来自于我在 INSTALLED_APPS中导入了一个应用程序,这个应用程序本身在它的 __init__.py文件中导入了一个模型

我有:

settings.py

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

myapp.__init__.py

from django.contrib.sites.models import Site

myapp.__init__.py中注释掉 import models使它工作起来:

# from django.contrib.sites.models import Site

派对迟到了,但 Grappelli 也是我犯错的原因。我在 Pypi 上查了兼容的版本,修好了。

当我将 django 版本更改为1.9时,不会出现错误。 Pip 卸载 django Pip install django = = 1.9

我将 User导入到 settings文件中,以便像这样管理 rest 调用令牌

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

因为在那一刻,姜戈的解放还没有准备好。因此,我将 import放入函数中,它就开始工作了。需要在服务器启动后调用该函数

我的问题是,我试图在调用 django.setup()之前导入一个 Django 模型

这对我很有效:

import django
django.setup()


from myapp.models import MyModel

上面的脚本位于项目根文件夹中。

试试激活虚拟环境。 在我的例子中,使用 git 命令行工具:

source scripts/activate

解决了我的问题。

在我的例子中,我的一个设置‘ CORS _ ORIGIN _ WHITELIST’是在 setings.py 文件中设置的,但是在我的。Env 文件。因此,我建议您检查您的设置,特别是那些链接到。Env

在我的例子中,错误发生在我在 Django 2.0.6上制作 python manage.py makemigrations时。

解决方案是运行 python manage.py runserver并查看实际错误(这只是一个缺失的环境变量)。

正如其他人所说,这可能是由于您没有安装 INSTALLED_APPS中列出的应用程序造成的。

在我的例子中,manage.py尝试记录异常,导致尝试呈现异常,但由于应用程序尚未初始化而失败。作者 在 manage.py中注释掉 except子句,异常显示时没有特殊的呈现,避免了混淆错误。

# 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

我尝试了很多方法,但是只是将 Django 降级到1.8.18就解决了这个问题:

pip install django==1.8.18

这是其中一个已安装的应用程序失败,但我找不到是哪一个。

在显式运行脚本时,顶部的 django.setup ()将无法工作。 我的问题解决了,当我添加到底部的设置文件

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

在尝试访问 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.

在应用程序加载模型类之前尝试访问 Question导致了我的错误。

当我尝试运行时,我得到了这个错误:

python manage.py makemigrations

我尝试了很多东西,发现自己添加了一些对“ setings.py”-“ INSTALLED _ APPS”的引用

只要确保你写的是正确的。我的错误是“ . model.”而不是“ . app.”

修正了那个错误,现在起作用了。

当我尝试运行 test.py时会出现这个错误(不是完整的脚本,我不想使用 python manage.py test)

下面的方法对我很有效。

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

在导入任何模型之前,首先导入并运行 django.setup ()


以上所有的答案都是好的,但是有一个简单的错误,一个人可以做的是(事实上在我的情况下是)。

在调用 django.setup()之前,我从我的应用程序中导入了 Django 模型。所以正确的方法是..。

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


import django
django.setup()


还有其他进口商品,比如

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

我遇到过这个问题,它的根目录是 asgi.py:

from channels.auth import AuthMiddlewareStack


但是我们没有在协议类型路由器中使用它。显然,我们必须使用 调用 AuthMiddlewareStack 模块时使用 websocket 或其他协议。

对于将来可能偶然发现这一点的其他人:

如果在运行 Python 3.8并尝试使用多处理包时遇到这个问题,那么很可能是由于子处理的代码是“生成的”而不是“分叉的”。这是 Mac OS 上 Python 3.8的一个更改,其中默认的 process start 方法从“ fork”更改为“ spawn”。 这是姜戈的 已知问题

为了避开它:

import multiprocessing as mp
mp.set_start_method('fork')

如果错误地启动了普通的 Python shell 并试图在其中导入 Django 模型,则可能会出现此错误。

相反,您应该使用 python manage.py shell

我认为这还没有被提到,但是这是导致错误的一个常见原因: 当您指定使用模型的启动代码时,错误就会发生。如果你遵循 这个的方法,并把它放到你的 AppConfig你的 不可以导入模型在文件的顶部,但在 ready()的方法。例如:

# works as models are imported in the ready() method
from django.apps import AppConfig


class MatcherConfig(AppConfig):
name = 'matcher'
verbose_name = 'Match-Making'
def ready(self):
from matcher.background_tasks import close_timeout_games
from matcher.models import FourPlayerGame
# check if a player is not responding every 5 seconds
close_timeout_games(FourPlayerGame, repeat=5)

然而,以下是 错了:

# won't work as models are imported at the beginning
from django.apps import AppConfig
from matcher.background_tasks import close_timeout_games
from matcher.models import FourPlayerGame


class MatcherConfig(AppConfig):
name = 'matcher'
verbose_name = 'Match-Making'
def ready(self):
# check if a player is not responding every 5 seconds
close_timeout_games(FourPlayerGame, repeat=5)

有关详细信息,请参阅 这个答案。

当我试图在设置包的 init 文件(__init__.py)中加载一个函数时遇到了这个问题。

这个错误的原因

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet

在加载设置之前,我想加载另一个模块(例如 rest_framework)。

为了解决这个问题,我将函数放在设置包中的另一个模块(文件)中 (例如 common.py) ,它解决了这个问题。

我在这件事上遇到了麻烦 我的问题是因为在 setings.py 中有这段代码

导入 myapp.model

当我删除这个代码问题修复 我建议检查您的 setings.py 并删除这些代码

我得到这个错误 appregistrynotready的原因是,我偶然 登记册 User modelapp.py而不是 admin.py

看起来是这样的

app.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from .models import User


@admin.register(User)
class UserAdmin(BaseUserAdmin):
pass

我吸毒的时候也遇到过同样的问题

from django.urls import reverse

解决方案:

from django.urls import reverse_lazy