【问题标题】:Django: how to solve "Apps aren't loaded yet" error on model import?Django:如何解决模型导入时的“应用程序尚未加载”错误?
【发布时间】:2018-07-14 20:24:43
【问题描述】:

在我的应用程序的“views.py”文件中,我有以下导入:

from .models import City

在 localhost 上启动时,导入和应用程序工作正常。

在与“views.py”和“models.py”相同的文件夹中,我创建了另一个文件“database_csv_imports.py”,用于从 .csv 文件进行一次性数据库导入。

如果我使用与上面相同的行将City 模型导入“database_csv_imports.py”文件,我会得到一个错误:

Traceback (most recent call last):
  File "database_csv_imports.py", line 3, in <module>
    from .models import City
SystemError: Parent module '' not loaded, cannot perform relative import 

所以我已将相对导入更改为绝对导入:

from models import City

然而,这会引发另一个错误:

Traceback (most recent call last):
  File "database_csv_imports.py", line 3, in <module>
    from models import City
  File "/home/bart/python_projects/javascript/models.py", line 19, in <module>
    class Listing(models.Model):
  File "/home/bart/python_projects/testenv/lib/python3.5/site-packages/django/db/models/base.py", line 100, in __new__
    app_config = apps.get_containing_app_config(module)
  File "/home/bart/python_projects/testenv/lib/python3.5/site-packages/django/apps/registry.py", line 244, in get_containing_app_config
    self.check_apps_ready()
  File "/home/bart/python_projects/testenv/lib/python3.5/site-packages/django/apps/registry.py", line 127, in check_apps_ready
    raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

我查看了类似的 SO 问题,但没有找到解决方案: 我在 virtualenv 中运行所有脚本,我的应用程序安装在“settings.py”中,SECRET_KEY 不为空,makemigrationsmigrate 都已应用。我还认为这里发布的解决方案:django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet. file init 在这种情况下可能有点矫枉过正。

有人可以帮我解决导入错误吗?

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果您尝试直接在包中运行脚本,Python 和 Django 都会与您抗衡。

    实现它的最佳方法是使用setup.pyentry_points 功能,或者编写自定义django 管理命令(https://docs.djangoproject.com/en/2.0/howto/custom-management-commands/)。

    如果你想以艰难的方式做到这一点,这些是你需要的步骤

    1. python 路径需要包含包的父目录。最好的方法是从包含setup.py 的目录中运行pip install -e .。如果您没有setup.py(您真的应该!)并且如果您使用的是 virtualenvwrapper,add2virtualenv /home/bart/python_projects 命令将为您执行此操作。否则,您需要编辑 PYTHONPATH 环境变量。

    2. 要执行的文件中的导入不能是相对的。在您的情况下,这意味着 from javascript.models import City(您需要从包级别开始,即 PYTHONPATH 上的目录)。

    3. 您需要将DJANGO_SETTINGS_MODULE 设置为指向您的设置文件。

    4. 您需要在导入 django 后配置它import django; django.setup(),这应该在您的 database_csv_imports.py 文件的顶部,然后再导入模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      • 1970-01-01
      • 2014-12-04
      • 2016-10-05
      相关资源
      最近更新 更多