Django Shell Нет модуля с именами настроек - PullRequest
23 голосов
/ 10 сентября 2011

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

Ошибка: не удалось импортировать настройки myproject.settings (это на sys.path?): Нет модуля с именем 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 игнорирует переменную окружения DJANGO_SETTINGS_MODULE.

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

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

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

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

Ответы [ 10 ]

30 голосов
/ 25 октября 2011

Это может произойти, если имя вашего корневого каталога совпадает с именем одного из ваших приложений.Например, здесь у меня есть каталог с именем 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)
>>> 
8 голосов
/ 10 января 2014

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

export DJANGO_SETTINGS_MODULE=

7 голосов
/ 10 сентября 2011

Кажется, что путь к вашему проекту не распознается 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)
3 голосов
/ 01 февраля 2017

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

2 голосов
/ 20 октября 2016

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

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

import settings

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

from django.conf import settings
1 голос
/ 26 августа 2016

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

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

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

В моем случае мне также пришлось переименовать .

1 голос
/ 11 февраля 2016

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

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

1 голос
/ 10 сентября 2011

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

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

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

0 голосов
/ 10 сентября 2018

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

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

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

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

0 голосов
/ 12 апреля 2017

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

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