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

2025-02-28 08:23:00
admin
原创
60
摘要:问题描述:从 1.8 升级到 django 1.9 时出现此错误。我查看了类似问题的答案,但我认为这不是任何第三方软件包或应用程序的问题。Traceback (most recent call last): File "manage.py", line 10, in <module&...

问题描述:

从 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”的已安装应用程序。


解决方案 1:

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

import django
django.setup()

如果这没有帮助,请尝试从已安装的应用程序列表中逐个删除第三方应用程序。

解决方案 2:

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

这对我有用:

import django
django.setup()

from myapp.models import MyModel

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

解决方案 3:

我的一个模型__init__.py文件上写了一个自定义函数。它导致了错误。当我从中移出这个函数时,__init__.py它就起作用了。

解决方案 4:

当您指定使用模型的启动代码时会发生错误。

如果你遵循这种方法并将其放入你的文件中,则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)

欲了解更多信息,还请参阅此答案。

解决方案 5:

python manage.py makemigrations就我的情况而言,当我进行时发生了错误Django 2.0.6

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

解决方案 6:

INSTALLED_APPS 当您在文件中添加应用程序settings.py但计算机中未安装该应用程序时,可能会出现此错误。您有两种解决方案:

  1. Install该应用程序使用类似pipubuntu 的包管理器

  2. settings.py或者在文件中注释掉已安装的应用程序

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

解决方案 7:


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


以上所有答案都很好,但人们可能会犯一个简单的错误(事实上就我而言是这样的)。

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

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

解决方案 8:

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

我有:

settings.py

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

myapp.__init__.py

from django.contrib.sites.models import Site

注释掉import models使其myapp.__init__.py起作用:

# from django.contrib.sites.models import Site

解决方案 9:

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

您应该使用python manage.py shell它。

解决方案 10:

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

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

解决方案 11:

对于我来说评论

'grappelli.dashboard',
'grappelli',

在 INSTALLED_APPS 中起作用

解决方案 12:

当您明确运行脚本时,顶部的 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()

解决方案 13:

我将导入User内容放入文件中,settings以便像这样管理其余调用令牌

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

因为当时 Django 库还没有准备好。因此,我将 放在import函数中,它就开始工作了。该函数需要在服务器启动后调用

解决方案 14:

当我尝试运行时出现该错误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):
        ...

解决方案 15:

我的问题是: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

解决方案 16:

对于不一致的 settings.py 也观察到此问题,因为错误地写入了 INSTALLED_APPS,请验证您是否正确包含了应用程序并用“,”分隔。

解决方案 17:

当我将 django 版本更改为 1.9 时,不会出现错误。
`pip uninstall django
pip install django==1.9`

解决方案 18:

我遇到了这样的问题,我的问题是因为在settings.py中有这段代码

导入 myapp.models

当我删除此代码时问题已修复我建议检查您的settings.py并删除此类代码

解决方案 19:

在我的例子中,我的一个设置“CORS_ORIGIN_WHITELIST”是在 settings.py 文件中设置的,但在我的 .env 文件中不可用。所以我建议你检查你的设置,特别是那些链接到 .env 的设置

解决方案 20:

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

在我的例子中,manage.py尝试记录异常,导致尝试渲染它,但由于应用程序尚未初始化而失败。通过注释掉异常except中的子句,无需特殊渲染即可显示,从而避免了令人困惑的错误。manage.py

# 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

解决方案 21:

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

pip install django==1.8.18

它是出现故障的已安装应用程序之一,但我找不到是哪一个。

解决方案 22:

当我尝试运行时出现该错误:

python manage.py makemigrations

我尝试了很多东西,然后意识到我添加了一些对“settings.py”-“INSTALLED_APPS”的引用

只要确保你写的内容正确即可。我的错误是将“.app.”写成了“.model.”

修正了该错误并且现在可以正常工作。

解决方案 23:

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

如果您在运行 Python 3.8 并尝试使用多处理包时遇到此问题,则可能是由于子进程是“spawned”而不是“forked”造成的。这是 Mac OS 上 Python 3.8 的一项更改,其中默认进程启动方法从“fork”更改为“spawn”。这是Django 的一个已知问题。

解决此问题的方法:

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

解决方案 24:

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

此错误的原因

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

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

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

解决方案 25:

我收到此错误的原因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

解决方案 26:

我使用时遇到了同样的问题

from django.urls import reverse

解决方案:

from django.urls import reverse_lazy

解决方案 27:

虽然迟到了,但 grappelli 也是导致我犯错的原因。我在 pypi 上查找了兼容版本,这帮我解决了问题。

解决方案 28:

尝试激活虚拟环境。就我而言,使用 git 命令行工具:

source scripts/activate

解决了我的问题。

解决方案 29:

尝试访问模型对象时出现此错误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导致了错误。

解决方案 30:

我遇到了这个问题,它的根源在于 asgi.py。我们加载了以下模块:

from channels.auth import AuthMiddlewareStack 

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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2974  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1836  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色。然而,在实际运行中,资源冲突是经常会遇到的难题。资源冲突可能导致项目进度延迟、成本增加以及产品质量下降等一系列问题,严重影响企业的效益与竞争力。因此,如何有效应对PLM系统中的资源冲突,成为众多企业关注的焦点。接下来,我们将详细探讨5...
plm项目管理系统   47  
  敏捷项目管理与产品生命周期管理(PLM)的融合,正成为企业在复杂多变的市场环境中提升研发效率、增强竞争力的关键举措。随着技术的飞速发展和市场需求的快速更迭,传统的研发流程面临着诸多挑战,而将敏捷项目管理理念融入PLM,有望在2025年实现研发流程的深度优化,为企业创造更大的价值。理解敏捷项目管理与PLM的核心概念敏捷项...
plm项目   47  
  模块化设计在现代产品开发中扮演着至关重要的角色,它能够提升产品开发效率、降低成本、增强产品的可维护性与可扩展性。而产品生命周期管理(PLM)系统作为整合产品全生命周期信息的关键平台,对模块化设计有着强大的支持能力。随着技术的不断发展,到 2025 年,PLM 系统在支持模块化设计方面将有一系列令人瞩目的技术实践。数字化...
plm软件   48  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用