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

时间:2015-12-06 05:36:11

标签: python django

从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&#39;的已安装应用。

28 个答案:

答案 0 :(得分:85)

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

import django
django.setup()

如果这无法帮助您尝试逐个删除已安装的应用列表中的第三方应用。

答案 1 :(得分:22)

我在我的一个模型__init__.py文件上写了一个自定义函数。它导致了错误。当我从__init__.py移动此功能时,它起作用了。

答案 2 :(得分:8)

就我而言,当我在python manage.py makemigrations上进行Django 2.0.6时发生了错误。

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

答案 3 :(得分:8)

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

  1. Install该应用使用包管理器,例如ubuntu中的pip
  2. 或者在settings.py文件
  3. 中注释已安装的应用

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

答案 4 :(得分:5)

尝试删除整个<svg viewBox='0 0 100 100'> <circle cx='0' cy='0' r='50' stroke="#000000"/> </svg> dictConfig并重新启动服务器。如果可行,请根据v1.9文档重写设置。

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

答案 5 :(得分:5)

我的问题是我在调用import django django.setup() from myapp.models import MyModel

之前尝试导入Django模型

这对我有用:

{{1}}

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

答案 6 :(得分:4)

对我来说,问题来自于我在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

答案 7 :(得分:2)

让我评论

'grappelli.dashboard',
'grappelli',

在INSTALLED_APPS工作

答案 8 :(得分:2)

当我尝试运行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):
        ...

答案 9 :(得分:1)

当您显式运行脚本时,顶部的

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

答案 10 :(得分:1)


在导入任何模型之前首先导入并运行 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

答案 11 :(得分:1)

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

答案 12 :(得分:1)

对于不正确的settings.py,也会发现此问题导致错误地写入INSTALLED_APPS,请验证您是否正确包含了应用并使用&#34;,&#34;

答案 13 :(得分:1)

我的问题是: django的返原&GT = 1.8.7,&LT; 1.9

对于django 1.9.7你应该使用: django的返原== 1.10.0

我将django-cms 3.2升级到3.3,并通过评论应用程序找到它,然后取消注释。

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

答案 14 :(得分:0)

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

from channels.auth import AuthMiddlewareStack 

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

答案 15 :(得分:0)

对于将来可能会遇到此问题的其他人:

如果您在运行 Python 3.8 并尝试使用多处理包时遇到此问题,很可能是因为子处理是“生成”而不是“分叉”。这是 Mac OS 上 Python 3.8 的更改,其中默认进程启动方法从“fork”更改为“spawn”。 这是与 Django 的 known issue

绕过它:

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

答案 16 :(得分:0)

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

您应该改为使用 shouldDisplayTitle

答案 17 :(得分:0)

当我尝试运行时收到该错误:

python manage.py makemigrations

我尝试了很多事情,并意识到我为“ settings.py”-“ INSTALLED_APPS”添加了一些引用

请确保您在此处写的内容正确无误。我的错误是“ .model”。而不是“ .app”。

更正了该错误,现在可以正常工作。

答案 18 :(得分:0)

尝试访问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对我造成了错误。

答案 19 :(得分:0)

我认为这还没有提到,但这是错误的常见原因:当您指定使用模型的启动代码时会发生错误。如果您遵循 this 方法并将其放入您的 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)

有关详细信息,另请参阅 this 答案。

答案 20 :(得分:0)

我尝试了很多事情,但是只有将Django降级到1.8.18才为我解决了这个问题:

pip install django==1.8.18

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

答案 21 :(得分:0)

正如其他人所说,这可能是由于您未安装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

答案 22 :(得分:0)

在我的情况下,我的设置之一是在settings.py文件中设置了“ CORS_ORIGIN_WHITELIST”,但在我的.env文件中不可用。因此,建议您检查设置,尤其是链接到.env

的设置

答案 23 :(得分:0)

我将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 libs还没有准备好。因此,我将import放在函数中,它开始工作。在服务器启动后需要调用该函数

答案 24 :(得分:-1)

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

source scripts/activate

解决我的问题。

答案 25 :(得分:-1)

晚会,但grappelli也是我错误的原因。我查看了pypi上的兼容版本并为我修复了它。

答案 26 :(得分:-2)

在应用包的“admin”模块中,注册在包的“models”模块中创建的所有数据库。

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

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

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

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

我希望这可以解决错误。

答案 27 :(得分:-2)

如果你的setting.py文件填写正确,你可以尝试到达manage.py文件,在main方法中调用danjgo.setup()。然后运行manage.py,最后再次运行项目,问题可能会消失。