Вопрос развертывания новичка Django - ImportError: Не удалось импортировать «настройки» настроек - PullRequest
14 голосов
/ 01 августа 2009

Приложение работает нормально, используя внутренний сервер django, однако, когда я использую apache + mod_python, я получаю ошибку ниже


  File "/usr/local/lib/python2.6/dist-packages/django/conf/__init__.py", line 75, in __init__
    raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)

ImportError: Could not import settings 'settings' (Is it on sys.path? Does it have syntax errors?): No module named settings

Вот необходимая информация

1) Каталог проекта: / root / djangoprojects / mysite

2) список каталогов / root / djangoprojects / mysite

ls -ltr
total 28
-rw-r--r-- 1 root root  546 Aug  1 08:34 manage.py
-rw-r--r-- 1 root root    0 Aug  1 08:34 __init__.py
-rw-r--r-- 1 root root  136 Aug  1 08:35 __init__.pyc
-rw-r--r-- 1 root root 2773 Aug  1 08:39 settings.py
-rw-r--r-- 1 root root 1660 Aug  1 08:53 settings.pyc
drwxr-xr-x 2 root root 4096 Aug  1 09:04 polls
-rw-r--r-- 1 root root  581 Aug  1 10:06 urls.py
-rw-r--r-- 1 root root  314 Aug  1 10:07 urls.pyc

3) Каталог приложения: / root / djangoprojects / mysite / polls

4) список каталогов / root / djangoprojects / mysite / polls

ls -ltr
total 20
-rw-r--r-- 1 root root 514 Aug  1 08:53 tests.py
-rw-r--r-- 1 root root  57 Aug  1 08:53 models.py
-rw-r--r-- 1 root root   0 Aug  1 08:53 __init__.py
-rw-r--r-- 1 root root 128 Aug  1 09:02 views.py
-rw-r--r-- 1 root root 375 Aug  1 09:04 views.pyc
-rw-r--r-- 1 root root 132 Aug  1 09:04 __init__.pyc

5) В любом месте файловой системы, где выполняется импорт django в интерпретаторе python, работает нормально

6) содержимое httpd.conf

<Location "/mysite">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE settings
    PythonOption django.root /mysite
    PythonPath "['/root/djangoprojects/', '/root/djangoprojects/mysite','/root/djangoprojects/mysite/polls', '/var/www'] + sys.path"
    PythonDebug On
</Location>

7) Переменная PYTHONPATH установлена ​​в

echo $PYTHONPATH
/root/djangoprojects/mysite

8) Для DJANGO_SETTINGS_MODULE установлено значение

echo $DJANGO_SETTINGS_MODULE
mysite.settings

9) содержание sys.path равно

import sys
>>> sys.path
['', '/root/djangoprojects/mysite', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/dist-packages', '/usr/local/lib/python2.6/dist-packages']

Как добавить местоположение настроек в sys.path, чтобы оно сохранялось в течение сеансов?

Я прочитал бесчисленное количество сообщений с людьми, у которых была такая же проблема, и я очень много пытался превзойти меня в том, что мне нужно делать.

Нужна помощь.

Заранее спасибо Анкур Гупта

Ответы [ 2 ]

5 голосов
/ 01 августа 2009

Ваша конфигурация apache должна выглядеть следующим образом:

<Location "/mysite">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonOption django.root /mysite
    PythonPath "['/root/djangoprojects/', '/root/djangoprojects/mysite','/root/djangoprojects/mysite/polls', '/var/www'] + sys.path"
    PythonDebug On
</Location>

Обратите внимание, что единственным отличием является "mysite.settings". Не забудьте перезапустить apache после изменения конфигурации (перезапуск apache2ctl). См. http://docs.djangoproject.com/en/dev/howto/deployment/modpython/ для получения дополнительной информации.

0 голосов
/ 01 сентября 2009

Попробуйте изменить на следующее:

<Location "/mysite">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonOption django.root /mysite
    PythonPath "['/root/djangoprojects', '/var/www'] + sys.path"
    PythonDebug On
</Location>

Не используйте "/" в конце записей PythonPath (это может быть проблемой, у меня были проблемы с этим, по крайней мере, в Windows).

Записи '/ root / djangoprojects / mysite', '/ root / djangoprojects / mysite / polls' не нужны, поскольку вы будете ссылаться на свои модули по полному имени (то есть mysite.sttings означает модуль настроек внутри mysite. пакет, который является правильным способом доступа к нему в PythonPath /root/djangoprojects).

...