将应用程序移动到嵌套文件夹后的 ImportError

Posted

技术标签:

【中文标题】将应用程序移动到嵌套文件夹后的 ImportError【英文标题】:ImportError After Moving App to Nested Folder 【发布时间】:2012-12-20 22:42:02 【问题描述】:

当我想看看能否以更好的方式组织我的项目时,我的应用程序运行良好。我通读了本教程on structuring a django project。

之前我的项目结构如下:

卡木卡木 书籍 admin.py models.py views.py __init__.py 静态 模板 urls.py views.py settings.py wsgi.py __init__.py

我想要做的是将书籍应用程序移动到应用程序文件夹中。因此我这样做并将项目结构更改为以下内容:

卡木卡木 应用程序 书籍 admin.py models.py views.py __init__.py 静态 模板 urls.py views.py settings.py wsgi.py __init__.py

然后我更改了 views.py 和 admin.py 中的导入 从books.models 到apps.books.models。 我还将settings.py 中的INSTALLED_APPS 从books 更改为apps.books。

当我尝试运行 syncdb 时,我收到以下错误:

raise ImproperlyConfigured('ImportError %s: %s' % (app, e.args[0]))
django.core.exceptions.ImproperlyConfigured: ImportError apps.books: No module named apps.books

我在这里搞砸了什么,所以它再也找不到我的应用程序了?

【问题讨论】:

manage.py中的路径改了吗? @Ahsan 为什么我需要这样做? manage.py 文件只是引用了仍然在同一个地方的设置文件 【参考方案1】:

您的应用程序文件夹没有 __init__.py 文件,因此无法识别为 python 模块

【讨论】:

好点,虽然我只是将 _init_.py 文件添加到应用程序文件夹中,但仍然出现相同的错误。 如果不是 django 开发服务器,重新启动它可能会有所帮助,但我仍然想知道为什么 syncdb 会拒绝工作【参考方案2】:

按照相同的指南,我遇到了同样的错误,因为未引用以下列表的最后一点。确保您执行了以下更改:

在apps文件夹中创建一个空白__init__.py文件(python需要将其识别为一个包)

在您引用外部应用程序的任何地方更新导入语句:

from projectname.apps.appname.models import YourModel, YourOtherModel

settings.py 内部编辑INSTALLED_APPS 使其看起来像这样:

INSTALLED_APPS = (

    ...

    # apps
    'projectname.apps.appname1',
    'projectname.apps.appname2',
)

这个没有在指南中指定:在你所有的urls.py文件中,更新urlpatterns

之前:

# client views
urlpatterns += patterns('appname',
    ...
)

之后:

# client views
urlpatterns += patterns('projectname.apps.appname',
    ...
)

最后记得致电python manage.py syncdb更新您的更改

希望有所帮助。

【讨论】:

以上是关于将应用程序移动到嵌套文件夹后的 ImportError的主要内容,如果未能解决你的问题,请参考以下文章

将 PDFS 转换为 JPEGS 并将转换后的 jpeg 移动到它们各自的子文件夹中

powershell 将嵌套文件移动到顶级目录#Snippet

将 C++ 嵌套类分离到它们自己的头文件中

VMware虚拟机无法启动复制或移动后的虚拟机系统

jq json将对象移动到嵌套对象并迭代未知名称/对象数

更改模块目录后的 Python 酸洗