Django 问题:django.setup() 抛出“ImportError: No module named 'project_name'”

Posted

技术标签:

【中文标题】Django 问题:django.setup() 抛出“ImportError: No module named \'project_name\'”【英文标题】:Django Trouble: django.setup() throws "ImportError: No module named 'project_name'"Django 问题:django.setup() 抛出“ImportError: No module named 'project_name'” 【发布时间】:2016-08-01 19:50:15 【问题描述】:

我一直遇到一个问题,我认为可以通过以下两种方法之一解决。我们有一个 django 项目,我正在尝试编写一些 iPython 笔记本用于教学目的,并将它们放在项目根目录下的tutorials 目录中(即~/tutorials)。

在笔记本的开头,我需要导入几个模块,但我遇到了与此堆栈溢出问题中详述的一个类似的问题:Relative imports in Python 3,(python 找不到路径,即使它可以在我从根目录运行笔记本)

我的解决方案是在 path 变量中指定目录根目录的绝对路径,并将其附加如下:

import sys
path = 'Users/greg/project_name'
sys.path.append(path)

这很奏效,我已经能够进行导入。但是,我现在遇到的问题是,当我在 Django 模型上运行调用 get 的函数时,如下所示:

Platform.objects.get(name='platform_name').platform_levels.get(db_name=level).id

它从python3.4/site-packages/django/apps/registry.py 文件中引发错误:

AppRegistryNotReady: Models aren't loaded yet.

有没有人知道为什么它们没有被加载以及我需要做些什么不同的事情?如果我应该提供其他信息来帮助您回答这个问题,请告诉我。谢谢!

编辑:@albar 的建议导致了一个新错误,我认为这是所有问题的根源。当我运行django.setup() 时,它会在这一行引发错误:

mod = importlib.import_module(self.SETTINGS_MODULE)

说:

ImportError: No module named 'project_name'

是否需要能够将整个项目作为模块导入,如果需要,我如何告诉它如何找到它?

【问题讨论】:

【参考方案1】:

你必须在你的脚本中setupDjango:

import django
django.setup()

编辑:在此之前,您必须定义您的settings 模块:

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'

【讨论】:

感谢您迄今为止的帮助@albar。 django.setup() 引发了我在编辑中详述的错误。知道如何处理吗? 实际上,在附加路径之后运行django.setup() 可以让一切正常。下一步是将项目的路径永久保存在 sys.paths 变量中,而不必每次都重新加载。 谢谢@albar——我会调查的! 本帖不回答问题

以上是关于Django 问题:django.setup() 抛出“ImportError: No module named 'project_name'”的主要内容,如果未能解决你的问题,请参考以下文章

外部文件使用django的models

外部文件使用django的models

django离线脚本组件

django离线脚本组件

django 视图中异步执行python脚本

不在框架中,利用Django的models操作