I’ve deployed Django to Apache via mod_wsgi. Django is running fine when hosted from Apache. However, I’m trying to do some maintenance via manage.py, but when I try and run it, I get the error:
Error: Could not import settings ‘myproject.settings’ (Is it on sys.path?): No module named settings
user@localhost:~$ cd /usr/local/myproject
user@localhost:/usr/local/myproject$ ls
drwxr-xr-x 2 apache apache 4096 2011-09-07 19:38 apache
-rw-r--r-- 1 apache apache 0 2011-05-25 14:52 __init__.py
-rw-r--r-- 1 apache apache 813 2011-09-09 16:56 manage.py
drwxr-xr-x 6 apache apache 4096 2011-09-09 16:43 myapp
-rw-r--r-- 1 apache apache 4992 2011-09-07 19:31 settings.py
drwxr-xr-x 4 apache apache 4096 2011-09-08 20:32 templates
-rw-r--r-- 1 apache apache 1210 2011-09-08 14:49 urls.py
Django seems to be ignoring the DJANGO_SETTINGS_MODULE environment variable.
user@localhost:~$ cd /usr/local/myproject
user@localhost:/usr/local/myproject$ export DJANGO_SETTINGS_MODULE=settings
user@localhost:/usr/local/myproject$ python manage.py shell
Error: Could not import settings 'myproject.settings' (Is it on sys.path?): No module named settings
user@localhost:/usr/local/myproject$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import settings
>>>
Just to confirm I wasn’t going crazy, I commented out everything inside manage.py except the import settings line, and it ran correctly.
I’ve also tried setting os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' and sys.path.append('/usr/local/myproject') directly at the top of manage.py, to no avail.
What’s going on here? Why is Django using the wrong settings module name? This is driving me crazy.
This can happen if your root directory name is the same as the name of one of your apps. For example here I have a directory called
barcontaining a Django project with an app also calledbar:Changing the root directory’s name to
foo(or anything else other thanbar) solves the problem: