在我应用的“ views.py”文件中,我具有以下导入内容:
from .models import City
在本地主机上启动时,导入和应用程序运行正常。
在与“ 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.
我看过类似的问题,但没有找到解决方案:
我正在virtualenv中运行所有脚本,我的应用程序安装在“ settings.py”中,SECRET_KEY
不为空,并且makemigrations
和migrate
均已应用。我还认为解决方案发布在这里:django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet. file init在这种情况下可能对我来说太过分了。
有人可以帮我解决导入错误吗?
答案 0 :(得分:0)
Python和Django都会与您抗衡。
完成此操作的最佳方法是使用entry_points
的{{1}}功能,或编写自定义django admin命令(https://docs.djangoproject.com/en/2.0/howto/custom-management-commands/)。
如果您想用困难的方式做,这些就是您需要的步骤
python路径需要包含包的父目录。最好的方法是从包含setup.py
的目录中运行pip install -e .
。如果您没有setup.py
(您确实应该这样做!),并且您正在使用virtualenvwrapper,则setup.py
命令将为您完成此操作。否则,您需要编辑add2virtualenv /home/bart/python_projects
环境变量。
要执行的文件中的导入不能是相对的。就您而言,这意味着PYTHONPATH
(您需要从软件包级别开始,即from javascript.models import City
上的目录)。
您需要设置PYTHONPATH
指向您的设置文件。
您需要在导入DJANGO_SETTINGS_MODULE
之后配置django,在导入模型之前,它应该位于import django; django.setup()
文件的顶部。