Django常见问题ImportError: Could not import settings
2014-07-29
Django  / 已有5985人围观

在使用wsgi或者uWSGI运行Django项目的时候,经常会遇到ImportError: Could not import settings的错误,这个问题大部分情况下是因为没有将Django项目加到sys.path中。但是,也有可能是因为一些其他的奇葩原因导致这个问题。前几天我在调试Django项目的时候就遇到了这样的问题,在这里记录一下解决过程。

前几天修改自己的博客项目GeekBlog,项目本身基于Django 1.5开发,更新完成之后,发现原先可以正常运行的项目报ImportError: Could not import settings 'geekblog.settings' (Is it on sys.path? Does it have syntax errors?): No module named geekblog.settings的错误,根据以往的经验,感觉可能是因为下面几个可能的原因:

1) settings文件有错误,导致初始化的时候异常

2) 项目路径没有添加到sys path或者python path中

3) DJANGO_SETTINGS_MODULE配置错误

然后我就对这几个可能的原因一一进行验证。先是对settings文件进行静态代码检查,发现没有问题,不是因为第一个原因;然后通过下面的代码验证sys path:

import sys

for path in sys.path:
    print path

项目路径已经添加到了sys path中,在python shell中也能正常引用,也不是因为第二个原因;最后看了一下DJANGO_SETTINGS_MODULE配置,和修改之前的版本一致,不是因为第三个原因。。。。

没有办法,只能通过Google寻找答案,但是,发现别人的问题差不多都是因为上面几个原因导致的,别人的解决方法在我这里完全没有用。。

之后怀疑会不会是系统的问题,于是从线上将可运行的项目代码拷贝下来,然后放在本地运行,可以运行!!不是系统环境的问题。。没有办法,只能用工具一一对比修改前后的代码,并没有发现可疑的修改地方。最后只能将新修改的代码复制到老的项目代码中,然后居然发现可以正常运行!!!

然后我就比较无语了,代码一样,但是一个可以运行,一个不可以。。头疼了半天,最后突然想到会不会是因为文件权限的问题,对比了一下两个项目目录,发现文件的权限果然不一样,于是通过脚本修改了项目中所有文件的权限:

sudo chmod -R 666 ./

重新部署,运行,好了!!

居然会是因为文件权限的问题,真是有够奇葩,之前都没有遇到过。。。不过还好,以后就有经验了。。


Over!

本文地址:http://xianglong.me/article/django-importError-could-not-import-settings/

特别声明:本站文章,如非注明,皆为降龙原创。转载需注明本文链接并保证链接可用。