Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django Shell No module named settings

Tags:

python

django

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.

like image 444
Cerin Avatar asked Sep 09 '11 21:09

Cerin


People also ask

How do I access Django settings?

When you use Django, you have to tell it which settings you're using. Do this by using an environment variable, DJANGO_SETTINGS_MODULE . The value of DJANGO_SETTINGS_MODULE should be in Python path syntax, e.g. mysite. settings .

What is settings PY in Django?

Insights about settings.py file. A Django settings file contains all the configuration of your Django Project. In this article the important points of settings.py file of Django will be discussed. A settings file is just a Python module with module-level variables.

How do I import python settings?

In your python settings file, you have to import our LazySetting class located in python_settings. Only the first time you call this property, the HeavyInitializationClass will be instantiated and the *args and **kwargs parameters will be passed. Every time you call this property the same instance will be returned.


1 Answers

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 bar containing a Django project with an app also called bar:

Simons-MacBook-Pro ~/temp $ cd bar  Simons-MacBook-Pro ~/temp/bar $ ./manage.py shell Error: Could not import settings 'bar.settings' (Is it on sys.path?): No module named settings  Simons-MacBook-Pro ~/temp/bar $ ls -l total 48 -rw-r--r--  1 simon  staff     0 25 Oct 10:46 __init__.py -rw-r--r--  1 simon  staff   130 25 Oct 10:46 __init__.pyc drwxr-xr-x  7 simon  staff   238 25 Oct 10:46 bar -rwxr-xr-x  1 simon  staff   503 25 Oct 10:46 manage.py -rw-r--r--  1 simon  staff  5025 25 Oct 10:46 settings.py -rw-r--r--  1 simon  staff  2658 25 Oct 10:46 settings.pyc -rw-r--r--  1 simon  staff   556 25 Oct 10:46 urls.py 

Changing the root directory's name to foo (or anything else other than bar) solves the problem:

Simons-MacBook-Pro ~/temp/bar $ cd ..  Simons-MacBook-Pro ~/temp $ mv bar foo  Simons-MacBook-Pro ~/temp $ cd foo  Simons-MacBook-Pro ~/temp/foo $ ./manage.py shell Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05)  [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>>  
like image 87
Simon Whitaker Avatar answered Oct 19 '22 17:10

Simon Whitaker