导入Django设置时出现奇怪错误

8 投票
3 回答
11779 浏览
提问于 2025-04-16 17:50

我有很多项目是在Ubuntu系统上用Python 2.7和virtualenv/virtualenvwrapper做的。在我的工作中,有些开发者用的是macOS和Windows。一般来说,我创建项目的方式都是一样的:

django-admin.py start project x

我们使用svn来管理代码,但有时候,我尝试一些操作时,出现了一些我无法理解的问题,比如:

python manage.py runserver

这个操作不成功,但这只发生在我自己的笔记本上,其他开发者和生产服务器上都没问题。

有没有什么建议?

我遇到了这个错误:

错误:在包含'manage.py'的目录中找不到文件'settings.py'。看起来你做了一些自定义设置。你需要运行django-admin.py,并传入你的设置模块。(如果settings.py文件确实存在,可能是因为某种原因导致了ImportError。)

但显然,settings文件是存在的,并且和manage.py文件在同一个文件夹里,只有我这边不工作...

这在使用django和appengine时也会发生。

3 个回答

1

我花了一个小时在Django的代码里到处找,最后发现了这个:

manage.py [command] --traceback

原来我的应用里有个导入错误。一旦我看到了这个错误,修复它只花了十秒钟。 :/

3

如果你在尝试使用django和appengine时遇到这个错误,并且你是按照这个指南来操作的,

而且你创建了指向文件夹的符号链接,那么这个指南在创建djangoappengine的符号链接时是错误的。你需要向上移动一个目录,比如:

错误的做法:

把以下文件夹复制到你的项目中(例如,django-testapp):

django-nonrel/django => <project>/django
djangotoolbox/djangotoolbox => <project>/djangotoolbox
django-autoload/autoload => <project>/autoload
django-dbindexer/dbindexer => <project>/dbindexer
djangoappengine => <project>/djangoappengine

正确的做法:

把以下文件夹复制到你的项目中(例如,django-testapp):

django-nonrel/django => <project>/django
djangotoolbox/djangotoolbox => <project>/djangotoolbox
django-autoload/autoload => <project>/autoload
django-dbindexer/dbindexer => <project>/dbindexer
djangoappengine/djangoappengine => <project>/djangoappengine

注意最后一行。

29

我遇到了这个错误:

错误:在包含 'manage.py' 的目录中找不到文件 'settings.py'。看起来你做了一些自定义设置。你需要运行 django-admin.py,并传入你的设置模块。(如果 'settings.py' 文件确实存在,但还是出现了 ImportError,那就说明有其他问题。)

manage.py 脚本每当发生导入错误时都会打印这个警告,所以如果你的 settings.py 模块导入了其他东西,而这些东西导致了导入错误,manage.py 仍然会打印这个警告。

一种诊断方法是(暂时)修改 manage.py

#!/usr/bin/env python
from django.core.management import execute_manager
try:
    import settings # Assumed to be in the same directory.
except ImportError:
    import sys
    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
    sys.exit(1)

if __name__ == "__main__":
    execute_manager(settings)

改为

#!/usr/bin/env python
from django.core.management import execute_manager
import settings # Assumed to be in the same directory.

if __name__ == "__main__":
    execute_manager(settings)

然后在运行 $ python manage.py runserver 时查看打印出的堆栈跟踪信息。

撰写回答