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


93

从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
您在使用任何第三方应用程序吗?请分享您的settings.py
utkbansal,2015年

我正在使用许多第三方应用程序,但我认为此错误是由“ django / apps / registry.py”而不是站点软件包中的任何其他应用程序引起的。
Kishore K

1
django-crispy-forms遇到了类似的问题,因为该库尚未支持1.9。因此,这可能是不受支持的应用。
utkbansal 2015年

1
我没有使用那个包裹。抱歉,如果我错了,如果它与任何软件包有关,则跟踪将指向站点软件包中的该应用程序,对吗?
Kishore K

相同的payu不支持1.9
GrvTyagi,2016年

Answers:


125

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

import django
django.setup()

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


8
我尝试过,但是出现了错误“ django.core.exceptions.ImproperlyConfigured:SECRET_KEY设置不能为空。” 即使我在设置文件中有SECRET_KEY。
Kishore K

11
尝试在提到的行之前声明SECRET_KEY ,例如:SECRET_KEY ='MY SECRET KEY'import django django.setup()它对我有用....现在出现另一个错误:)
Duda Nogueira

1
这是一个很好的问题答案:“如何从独立脚本访问Django模型对象?” :-)在运行上面的代码之前,您需要做:os.environ.setdefault(“ DJANGO_SETTINGS_MODULE”,“ your.settings”)。
AdvilUser

1
不适用于设置,但适用于我的独立脚本。如果您忘记在独立的Python脚本中调用django.setup(),也会发生此异常。docs.djangoproject.com/en/1.10/ref/applications/...
安德烈·杜阿尔特

30
django.setup()用于独立脚本中。您不应该将它放在设置中
Alasdair

37

我会在一个模型__init__.py文件中编写一个自定义函数。这是导致错误。当我从此功能移开该功能__init__.py时。


3
同样在这里,移动它也固定。
Brachamul 2015年

值得注意的是,此文件中注释掉的功能也可能导致此错误。
Autobots的B-Tron,

25

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

这为我工作:

import django
django.setup()

from myapp.models import MyModel

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


运行脚本时我遇到了这个问题,此问题得以解决。
几乎是初学者,

14

就我而言,当我提出发生错误python manage.py makemigrationsDjango 2.0.6

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


13

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

  1. Install该应用使用pipubuntu中的包管理器
  2. 或注释掉settings.py文件中已安装的应用

如果您不在virtual environment自己的项目中,也可能会出现此错误。



5

对我来说,问题出在我正在导入一个应用程序中INSTALLED_APPS,该应用程序本身就是在其__init__.py文件中导入模型

我有:

settings.py

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

myapp.__init__.py

from django.contrib.sites.models import Site

注释掉import modelsmyapp.__init__.py做它的工作:

# from django.contrib.sites.models import Site

我有类似的问题。但是我需要导入。你会怎么做?
JohnnyQ '18年

您始终可以进行重构,以避免从init导入模型。可以肯定使用的一种方法是重构导入应用程序的文件,但这可能是相当大的更改。最后,这就是我要做的!
Albyorix

与@JohnnyQ相同的问题。在1.8中可以正常工作,但在1.9中可以中断。周围有相关文件吗?在我的情况下,由于从django.contrib.auth.models中导入了User而引起了异常
Vinod

在这里一个单独的问题中问过这个问题stackoverflow.com/questions/59927122/…并得到了答案。要点,别无选择,只能进行重构
Vinod

4

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

我使用Pycharm shell并键入import djangodjango.setup()。问题已解决。
Seyed Hasan Mousavi

2

对我来说

'grappelli.dashboard',
'grappelli',

在INSTALLED_APPS中工作


对我来说,只是我不小心拥有'one_third_pary_app,''one_third_pary_app',(注意位置,
J0ANMM

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

1

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


1

对于不一致的settings.py,也可能会出现此问题,因为它们会错误地编写INSTALLED_APPS,请验证您是否正确包含了应用程序并用“,”分隔。


1

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


1

我将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函数放入内部,它开始起作用。服务器启动后需要调用该函数


0

就我而言,其中一项设置“ CORS_ORIGIN_WHITELIST”已在settings.py文件中设置,但在我的.env文件中不可用。因此,我建议您检查设置,尤其是链接到.env的设置


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

0

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

pip install django==1.8.18

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


0

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

python manage.py makemigrations

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

只要确保您在此处写的内容是正确的即可。我的错误是“ .model”。而不是“ .app”。

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


-1

晚会晚了,但是格拉佩利也是我犯错的原因。我在pypi上查找了兼容版本,并为我修复了该版本。



-1

尝试访问中的模型对象时出现此错误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在应用加载模型类之前尝试访问对我造成了错误。


是否在Question此AppConfig的models.py中定义了模型?
Gustavo_fringe '19

是的,它在那里定义
Ojonugwa Jude Ochalifu

-2

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


-2

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

假设您在“模型”模块中将数据库类定义为:

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

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

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

希望这样可以解决错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.