Django - ImportError: No module named apps

5
我正在尝试在djangoproject.com网站上进行Django教程,但是当我到达第一个“makemigrations polls”部分时,我一直收到此错误:

“ImportError: No module named apps”

如何解决这个错误?

Traceback (most recent call last):
  File "manage.py", line 22, in 
    execute_from_command_line(sys.argv)
  File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 312, in execute
    django.setup()
  File "/Library/Python/2.7/site-packages/django/__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Library/Python/2.7/site-packages/django/apps/registry.py", line 85, in populate
    app_config = AppConfig.create(entry)
  File "/Library/Python/2.7/site-packages/django/apps/config.py", line 112, in create
    mod = import_module(mod_path)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)

你安装了哪个版本的Django? - John Gordon
当我输入 python -m django --version 时,会出现以下错误信息:/usr/bin/python: No module named django.main; 'django' is a package and cannot be directly executed。 - Monil
请确保您正确安装了Django。 - Windsooon
请展示您的目录结构以及您的 settings.py 文件。 - sebb
正确卸载和安装Django。 - Piyush S. Wanare
python -m django --version 适用于 Django 1.9 及以上版本。对于早期版本,您可以执行 python -c 'import django; print(django.VERSION)' - Alasdair
6个回答

7
你的问题是Django版本与教程版本不匹配。
在Django 1.9+中,startapp命令会自动创建一个应用程序配置类,因此教程要求你将polls.apps.PollsConfig添加到INSTALLED_APPS中。
对于Django 1.8及更早版本,教程要求你将polls添加到INSTALLED_APPS中。如果你改为添加polls.apps.PollsConfig,除非手动创建PollsConfig,否则会出现导入错误。

5

这个教程中有一个错误。

它指导我们在settings.py文件的INSTALLED_APPS部分中添加polls.apps.PollsConfig。我将其从polls.apps.PollsConfig更改为简单的polls,这样就可以成功进行迁移了。

我希望这能帮助其他遇到类似问题的人。


1
我认为教程中没有错误,问题在于你跟错了教程版本。 - Alasdair
1
你有任何想法为什么这个解决方案有效,因为它对我也有效。 - Adarsh Trivedi

5
我遇到了一个非常类似的问题,但是和原帖中描述的问题明显不同。尽管如此,在调试我的问题时,这篇文章是我找到的第一篇响应,因此我会用我的答案来回应它。
问题:
我正在构建的应用程序在父名称空间下嵌套了应用程序,例如 customapp.polls 而不是只有 polls。我看到的错误是:
ModuleNotFoundError: No module named 'polls'

但如果你正在使用Python 3.5或更早的版本,则可能会看起来像以下内容:

ImportError: No module named polls

请注意,原始帖子中使用的是polls而不是apps

此帖子的答案

  • @Alasdair的答案很好。如果我强制出现类似的问题,我会得到一个关于customapp.polls.apps.PollsConfigcustomapp.polls.apps缺失而不是apps的错误,但这可能只是版本之间的差异。
  • @Monil的答案"解决"了我的问题,即使我已经定义了PollsConfig子类。正如@Alasdair所建议的那样,这种方法有效的原因通常是因为您没有添加AppConfig子类。

解决方案

在我的情况下,错误抱怨polls模块缺失(而不是apps)。由于@Monil的答案"解决"了我的问题,我能够将问题缩小到我的实际配置上。我的配置看起来相当等效:

class PollsConfig(AppConfig):
    name = 'polls'

但是由于我将我的应用程序放在父模块下面,所以我应该写成:

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

1
这适用于Django 2.0+。值得注意的是,customapp/settings.py中的条目应该将已安装的应用程序名称从“polls”更改为“customapp.polls”。谢谢! - RoboBear

1

您需要在虚拟环境中安装所需的软件包才能运行Django项目。首先,为您的项目创建虚拟环境。

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

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

source env/bin/activate

通过使用pip,您可以安装您的软件包。
pip install Django

然后开始您的Django项目。

0
在 Django 1.10.6 中,我遇到了相同的错误("no module named...")。对我起作用的解决方案是,在 settings.py 中将 "polls.apps.PollsConfig" 更改为 "mysite.polls"。o.O

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接