Django Shell没有模块命名设置

Cer*_*rin 23 python django

我已经将Django部署到了Apache mod_wsgi.从Apache托管时,Django运行正常.但是,我正在尝试进行一些维护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
Run Code Online (Sandbox Code Playgroud)

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
>>> 
Run Code Online (Sandbox Code Playgroud)

只是为了确认我没有发疯,我在manage.py中除了import settings行之外的所有内容都注释掉了,它运行正常.

我也试过设置os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'sys.path.append('/usr/local/myproject')直接在manage.py的顶部,但无济于事.

这里发生了什么?为什么Django使用错误的设置模块名称?这真让我抓狂.

Sim*_*ker 32

如果您的根目录名称与您的某个应用程序的名称相同,则会发生这种情况.例如,我在这里有一个名为bar包含Django项目的目录,其中也有一个app 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
Run Code Online (Sandbox Code Playgroud)

将根目录的名称更改为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)
>>> 
Run Code Online (Sandbox Code Playgroud)


Pau*_*sen 10

我有一个类似的问题,当我试图运行时返回相同的错误 django-admin.py startproject myapp.一个在此以前的答案让我看着办吧.问题是我以前指向DJANGO_SETTINGS_MODULE某个文件,我后来删除了该文件.要修复它,我只是用这个命令删除了指针:

export DJANGO_SETTINGS_MODULE=


Dav*_*542 8

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)
Run Code Online (Sandbox Code Playgroud)


Jan*_*lik 5

尽管西蒙·惠特克(Simon Whitaker)的回答(同名目录会使事情变得混乱)肯定是正确的,而不是建议您更改整个现有的目录结构,但我是否可以建议:

而不是使用“故障”/模棱两可......

import settings
Run Code Online (Sandbox Code Playgroud)

...使用更具体的...

from django.conf import settings
Run Code Online (Sandbox Code Playgroud)


Mar*_*era 5

不知何故,如果您的项目文件夹与其中包含设置文件的应用程序同名,并且如果您__init__.py在项目根文件夹中,它会弄乱 wsgi。我真的不明白为什么但是删除这个文件为我解决了这个问题。