【问题标题】:Converting Django project from Python 2 to Python 3: django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet将 Django 项目从 Python 2 转换为 Python 3:django.core.exceptions.AppRegistryNotReady:尚未加载应用程序
【发布时间】:2019-10-28 20:59:45
【问题描述】:

我正在将一个 Django 网站从 Python 2 转换为 Python 3。为此,我在整个项目上运行了 2to3。现在,在运行服务器时(在 Python 2 中运行良好)。现在,似乎有一个错误django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet. 似乎源于加载 django_cmets 应用程序的问题。我不清楚这是否与模板/模型问题或其他问题有关。 Python3 已安装在该项目的虚拟环境中。

(env) user:project user$ python3 manage.py check
Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_from_command_line(sys.argv)
  File ".../src/project/env/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File ".../src/project/env/lib/python3.7/site-packages/django/core/management/__init__.py", line 357, in execute
    django.setup()
  File ".../src/project/env/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File ".../src/project/env/lib/python3.7/site-packages/django/apps/registry.py", line 91, in populate
    app_config = AppConfig.create(entry)
  File ".../src/project/env/lib/python3.7/site-packages/django/apps/config.py", line 90, in create
    module = import_module(entry)
  File ".../src/project/env/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File ".../src/project/language/__init__.py", line 3, in <module>
    from django_comments.models import Comment
  File ".../src/project/env/lib/python3.7/site-packages/django_comments/models.py", line 7, in <module>
    from .abstracts import (
  File ".../src/project/env/lib/python3.7/site-packages/django_comments/abstracts.py", line 4, in <module>
    from django.contrib.contenttypes.fields import GenericForeignKey
  File ".../src/project/env/lib/python3.7/site-packages/django/contrib/contenttypes/fields.py", line 3, in <module>
    from django.contrib.contenttypes.models import ContentType
  File ".../src/project/env/lib/python3.7/site-packages/django/contrib/contenttypes/models.py", line 133, in <module>
    class ContentType(models.Model):
  File ".../src/project/env/lib/python3.7/site-packages/django/db/models/base.py", line 103, in __new__
    app_config = apps.get_containing_app_config(module)
  File ".../src/project/env/lib/python3.7/site-packages/django/apps/registry.py", line 252, in get_containing_app_config
    self.check_apps_ready()
  File ".../src/project/env/lib/python3.7/site-packages/django/apps/registry.py", line 135, in check_apps_ready
    raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

我还确保在 manage.py 中配置了 DJANGO_SETTINGS_MODULE

  1 #!/usr/bin/env python3
  2
  3 import os
  4 import sys
  5
  6 if __name__ == "__main__":
  7     os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")
  8
  9     from django.core.management import execute_from_command_line
 10
 11     execute_from_command_line(sys.argv)

【问题讨论】:

    标签: python django python-3.x python-2.7 python-2to3


    【解决方案1】:

    也许你可以在manage.py中这样做:

    import os
    import django
    import sys
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mis.settings")
    django.setup()
    
    from django.core.management import execute_from_command_line
    execute_from_command_line(sys.argv)
    

    【讨论】:

    • 谢谢,但没有运气。抛出相同的错误,除了追溯从 django.setup() 开始,如下所示:Traceback (most recent call last): File "manage.py", line 9, in &lt;module&gt; django.setup() File "~/src/app/env/lib/python3.7/site-packages/django/__init__.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) ...
    【解决方案2】:

    我刚刚找到了一个答案pythonanywhere,这意味着你应该不需要调用django.setup()。另外,你可以尝试在INSTALLED_APPS中一个一个禁用你的应用,这样可以找出问题出在哪里。别忘了先恢复manage.py中的代码!

    【讨论】:

    • 谢谢。这就是我现在正在尝试的。通过“恢复 manage.py 中的代码”,我认为您的意思是恢复我所做的任何更改(例如添加 django.setup()?
    猜你喜欢
    • 2018-06-18
    • 2016-09-26
    • 2016-08-04
    • 2016-01-08
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多