关于python:Django – ImportError:没有名为apps的模块

Django - ImportError: No module named apps

我正在Djangoproject.com网站上尝试Django教程,但当我到达执行第一个"makemigrations polls"的部分时,我一直收到以下错误:

ImportError: No module named apps

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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版本与教程的版本不匹配。

在django 1.9+中,startapp命令自动创建一个app config类,因此教程要求您将polls.apps.PollsConfig添加到INSTALLED_APPS中。

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


我有一个非常相似的问题,但与OP完全不同。也就是说,这篇文章是我在调试我的问题时发现的第一个响应,所以我用我的问题的答案来劫持它。

问题

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

1
ModuleNotFoundError: No module named 'polls'

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

1
ImportError: No module named polls

注意,原来的帖子里说的是polls,而不是apps

本帖的答案

  • @阿拉斯代尔的回答很好。如果我强迫一个类似的问题,我会得到一个关于customapp.polls.apps.PollsConfigcustomapp.polls.apps丢失而不是apps的错误,但这可能只是版本的不同。
  • @莫尼尔的回答"解决了"了我的问题,尽管我定义了一个PollsConfig子类。正如@alasdair所指出的,之所以有效,往往是因为您没有添加AppConfig子类。

解决方案

在我的例子中,错误抱怨polls模块丢失(不是apps)。既然@monils的答案"解决"了我的问题,我就可以将其缩小到实际配置范围。我的配置看起来相当于:

1
2
class PollsConfig(AppConfig):
    name = 'polls'

但既然我把我的应用放在一个父模块下面,我应该写:

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


教程中有一个错误。

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

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


您需要在virtualenv中安装所需的包才能运行django项目。首先,为您的项目创建virtualenv。

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

actiavte env安装您的需求。

1
source env/bin/activate

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

1
pip install Django

然后开始你的Django项目。


在Django 1.10.6中,我也有同样的错误("没有名为……"的模块)。我的解决方案是在settings.py中为"mysite.polls"更改"polls.apps.PollsConfig"。O.O