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> 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
但计算机中未安装该应用程序时,可能会出现此错误。您有两种解决方案:
Install
该应用程序使用类似pip
ubuntu 的包管理器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.LOGGING
dictConfig 并重启服务器。如果可行,请根据 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 model
了app.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或其他协议。
扫码咨询,免费领取项目管理大礼包!