Django - ImportError:没有名为应用程序的模块

Posted

技术标签:

【中文标题】Django - ImportError:没有名为应用程序的模块【英文标题】:Django - ImportError: No module named apps 【发布时间】:2017-01-24 04:39:59 【问题描述】:

我正在 djangoproject.com 网站上试用 Django 教程,但是当我到达执行第一次“makemigrations polls”的部分时,我不断收到此错误:

ImportError: 没有名为应用程序的模块

回溯(最近一次通话最后): 文件“manage.py”,第 22 行,在 execute_from_command_line(sys.argv) 文件“/Library/Python/2.7/site-packages/django/core/management/__init__.py”,第 338 行,在 execute_from_command_line 实用程序.execute() 文件“/Library/Python/2.7/site-packages/django/core/management/__init__.py”,第312行,在执行 django.setup() 文件“/Library/Python/2.7/site-packages/django/__init__.py”,第 18 行,在设置中 apps.populate(settings.INSTALLED_APPS) 文件“/Library/Python/2.7/site-packages/django/apps/registry.py”,第 85 行,在填充 app_config = AppConfig.create(入口) 文件“/Library/Python/2.7/site-packages/django/apps/config.py”,第 112 行,在创建中 mod = import_module(mod_path) 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py”,第 37 行,在 import_module __import__(名称)

我该如何解决这个错误?

【问题讨论】:

你安装了哪个版本的Django? 当我输入 python -m django --version 时得到这个:/usr/bin/python: No module named django.__main__; 'django' 是一个包,不能直接执行 确保正确安装 django。 向我们展示您的目录结构和 settings.py 文件 正确卸载和安装 Django。 【参考方案1】:

你的问题是你的Django版本和教程的版本不匹配。

在 Django 1.9+ 中,startapp 命令会自动创建一个应用配置类,因此the tutorial 要求您将polls.apps.PollsConfig 添加到INSTALLED_APPS

对于 Django 1.8 及更早版本,the tutorial 要求您将 polls 添加到 INSTALLED_APPS。如果您改为添加polls.apps.PollsConfig,则会出现导入错误,除非您手动创建PollsConfig

【讨论】:

【参考方案2】:

教程有错误。

它指示在settings.py 文件的INSTALLED_APPS 部分添加polls.apps.PollsConfig。我将它从polls.apps.PollsConfig 更改为简单的polls,就成功了。我能够成功进行迁移。

我希望这对面临类似问题的其他人有所帮助。

【讨论】:

我认为教程没有错误,问题是您使用的教程版本错误。 知道为什么这个解决方案有效,因为它对我也有效。【参考方案3】:

我遇到了一个非常类似的问题,但肯定是与 OP 不同。也就是说,这篇文章是我在调试问题时发现的第一批回复之一,所以我在劫持它并回答我的问题。

问题

我正在构建的应用程序具有嵌套在父命名空间下的应用程序,例如customapp.polls 而不仅仅是 polls。我看到的错误是

ModuleNotFoundError: No module named 'polls'

但如果您使用的是 Python 3.5 或更早版本,则可能如下所示:

ImportError: No module named polls

请注意,这在原始帖子中是 polls 而不是 apps

这篇文章的答案

@Alasdair 的answer 是一个不错的尝试。如果我强制执行类似的问题,我会收到关于缺少 customapp.polls.apps.PollsConfigcustomapp.polls.apps 而不是 apps 的错误,但这可能只是版本不同。 @Monil 的answer“解决了”我的问题,即使我定义了PollsConfig 子类。正如@Alasdair 所建议的那样,有效的原因通常是因为您没有添加AppConfig 子类。

解决方案

就我而言,该错误抱怨缺少polls 模块(不是apps)。而且由于@Monils answer“解决了”我的问题,我能够将其缩小到我的实际配置。我的配置看起来相当于:

class PollsConfig(AppConfig):
    name = 'polls'

但是因为我把我的应用放在一个父模块下面,我应该写:

class PollsConfig(AppConfig):
    name = 'customapp.polls'

【讨论】:

这个。适用于 Django 2.0+。应该注意的是,customapp/settings.py 中的条目应该将安装的应用程序命名也从“polls”更改为“customapp.polls”。谢谢!【参考方案4】:

你需要在你的 virtualenv 中安装所需的包来运行 Django 项目。首先为您的项目创建 virtualenv。

virtualenv env    #For python 2.7
virtualenv -p python3 env #For python 3.4

激活环境来安装您的要求。

source env/bin/activate

通过使用 pip 你可以安装你的包。

pip install Django

然后开始你的 Django 项目。

【讨论】:

【参考方案5】:

在 Django 1.10.6 中,我遇到了同样的错误(“没有名为...的模块”)。对我有用的解决方案是在settings.py 中将"polls.apps.PollsConfig" 更改为"mysite.polls"。 o.O

【讨论】:

【参考方案6】:

我找到了适合我的解决方案。当您在InstalledApps 中写入polls.apps.PollsConfig 时,您需要记住,第一个polls 指的是创建的应用程序,而不是站点。 在 Django 文档中,它可能有点混乱。

【讨论】:

以上是关于Django - ImportError:没有名为应用程序的模块的主要内容,如果未能解决你的问题,请参考以下文章

Python3.7 ImportError:没有名为“django”的模块

ImportError:仅在 django 中没有名为“bs4”的模块

Django:ImportError:没有名为'corsheaders'的模块

ImportError:没有名为 django.core.wsgi 的模块

Django 1.8:抛出 ImportError:没有名为“MySQLdb”的模块

django 管理员加载错误:/admin/login/ 处的 ImportError 没有名为后端的模块