Подтвердить что ты не робот

Django Shell Нет настроек модуля с именем

Я развернул Django в Apache через mod_wsgi. Django отлично работает при размещении в Apache. Тем не менее, я пытаюсь выполнить некоторое обслуживание с помощью manage.py, но когда я пытаюсь запустить его, я получаю сообщение об ошибке:

Ошибка: не удалось импортировать настройки "myproject.settings" (есть ли это на sys.path?): ни один модуль с настройками

[email protected]:~$ cd /usr/local/myproject
[email protected]:/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, похоже, игнорирует переменную среды DJANGO_SETTINGS_MODULE.

[email protected]:~$ cd /usr/local/myproject
[email protected]:/usr/local/myproject$ export DJANGO_SETTINGS_MODULE=settings
[email protected]:/usr/local/myproject$ python manage.py shell
Error: Could not import settings 'myproject.settings' (Is it on sys.path?): No module named settings
[email protected]:/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
>>> 

Просто, чтобы подтвердить, что я не сходил с ума, я прокомментировал все внутри manage.py, кроме строки import settings, и он работал правильно.

Я также попытался установить os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' и sys.path.append('/usr/local/myproject') непосредственно в начало manage.py, безрезультатно.

Что здесь происходит? Почему Django использует неправильное имя модуля настроек? Это сводит меня с ума.

4b9b3361

Ответ 1

Это может произойти, если имя вашего корневого каталога совпадает с именем одного из ваших приложений. Например, здесь у меня есть каталог с именем bar, содержащий проект Django с приложением, также называемым 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

Изменение имени корневого каталога на foo (или что-либо еще, кроме bar) решает проблему:

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)
>>> 

Ответ 2

У меня была аналогичная проблема, когда та же ошибка возвращалась, когда я пытался запустить   django-admin.py startproject myapp. A предыдущий ответ здесь помог мне понять это. Проблема заключалась в том, что я ранее указывал DJANGO_SETTINGS_MODULE на определенный файл, который я позже удалил. Чтобы исправить это, я просто удалил указатель с помощью этой команды:

export DJANGO_SETTINGS_MODULE=

Ответ 3

Кажется, что путь к вашему проекту не распознается wsgi. Это случилось со мной, и для ее решения я добавил это в начало моего файла .wsgi:

import os
import sys

root_path = os.path.abspath(os.path.split(__file__)[0])
sys.path.insert(0, os.path.join(root_path, 'project_name'))
sys.path.insert(0, root_path)

Ответ 4

Как бы то ни было, если ваша папка проекта совпадает с именем приложения, в котором есть файл настроек, и если у вас есть __init__.py в корневой папке проекта, это испортит wsgi. Я действительно не понимаю, почему, но удаление этого файла решило это для меня.

Ответ 5

Если вы используете wsgi/uwsgi в процессе производства...

У меня была такая же ошибка:

Если вы переименовали папку, созданную django startproject с файлами settings.py и wsgi.py, проверьте в файле wsgi.py строку: os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<your_folder_name>.settings")

В моем случае мне пришлось переименовать < your_folder_name > .

Ответ 6

Хотя Саймон Уайтакер отвечает (что одноименный каталог путает вещи), безусловно, стоит на месте, вместо того, чтобы предлагать вам изменить всю существующую структуру, могу ли я предложить:

Вместо использования "неисправного" /неоднозначного...

import settings

... используйте более конкретные...

from django.conf import settings

Ответ 7

Поскольку ваше веб-приложение работает, убедитесь, что вы используете manage.py с тем же интерпретатором python, который определен в вашем файле .wsgi(и если вы добавите другие каталоги в sys.path в ваш .wsgi файл, убедитесь, что они тоже находятся в pythonpath).

Если вы попытаетесь импортировать что-то в свой файл настроек, который вызывает ImportError, Django сообщает, что параметры не могут быть импортированы. В более новых версиях django указывается (If the file settings.py does indeed exist, it causing an ImportError somehow.), и я несколько раз сталкивался с этим.

Если это не так, попробуйте вместо этого использовать django-admin.py, на всякий случай что-то пошло не так в файле manage.py. AFAIK нет веских причин для изменения manage.py напрямую.

Ответ 8

Я случайно изменил свою переменную DJANGO_SETTINGS_MODULE с помощью команды echo: echo DJANGO_SETTINGS_MODULE=mysite.settings

Я просто выхожу из virtualenv и снова активировал его, что восстановило мои настройки.

Ответ 9

Проверьте совместимость версии virtualenv и версии django. когда он соответствует, он работает как драгоценный камень.

Ответ 10

В моем случае файл wsgi.py работал, когда система работала нормально, но я получал ImportError, когда пытался выполнить ручную команду manage.py, такую как migrate или collectstatic.

Я проверил wsgi.py на предмет импорта настроек и заметил, что сначала он добавляет путь к настройкам в sys.path следующим образом:

import sys
sys.path.append('/opt/server/settings')

Я добавил это в начало файла manage.py, и оно работает.

Ответ 11

Мне присвоили DJANGO_SETTINGS_MODULE значение "mealer.settings"

(django-env)[email protected]:~/snap/projects-on-django/Rester$ export -p | grep DJANGO

declare -x DJANGO_SETTINGS_MODULE="mealer.settings"

который я удалил

[email protected]:~/snap/projects-on-django/Rester$ export -n  DJANGO_SETTINGS_MODULE

(django-env)[email protected]:~/snap/projects-on-django/Rester$ export -p | grep DJAN

(django-env)[email protected]:

экспорт -p | grep DJAN ничего не нашел, как видите

этот ответ основан на ответе Пола Майнсхаузена