Python 使用mod_wsgi的Apache上的Django:ImportError on设置

Python 使用mod_wsgi的Apache上的Django:ImportError on设置,python,django,apache,settings,mod-wsgi,Python,Django,Apache,Settings,Mod Wsgi,我使用mod_wsgi在Apache2服务器上为Django站点提供服务。以下是我的mysite/mysite目录的外观: (mysite_venv)➜ mysite tree mysite -I "*.pyc" mysite ├── __init__.py ├── db.sqlite3 ├── settings │   ├── __init__.py │   ├── base.py │   └── local.py ├── u

我使用mod_wsgi在Apache2服务器上为Django站点提供服务。以下是我的mysite/mysite目录的外观:

(mysite_venv)➜  mysite  tree mysite -I "*.pyc"
    mysite
    ├── __init__.py
    ├── db.sqlite3
    ├── settings
    │   ├── __init__.py
    │   ├── base.py
    │   └── local.py
    ├── urls.py
    └── wsgi.py
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.local")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)
/Users/gagaxiaolong/PycharmProjects/mysite
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python27.zip
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/plat-darwin
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/plat-mac
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/plat-mac/lib-scriptpackages
/Users/gagaxiaolong/.virtualenvs/mysite_venv/Extras/lib/python
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/lib-tk
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/lib-old
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/lib-dynload
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/site-packages
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/site-packages/IPython/extensions
当我使用
python manage.py runmodwsgi
运行此项目时,我在日志中收到一个内部服务器错误,消息如下:

[wsgi:error] [pid 8900] ImportError:         No module named mysite.settings.local
[mpm_prefork:notice] [pid 8898] AH00170: caught SIGWINCH, shutting down gracefully
下面是我的manage.py的外观:

(mysite_venv)➜  mysite  tree mysite -I "*.pyc"
    mysite
    ├── __init__.py
    ├── db.sqlite3
    ├── settings
    │   ├── __init__.py
    │   ├── base.py
    │   └── local.py
    ├── urls.py
    └── wsgi.py
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.local")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)
/Users/gagaxiaolong/PycharmProjects/mysite
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python27.zip
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/plat-darwin
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/plat-mac
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/plat-mac/lib-scriptpackages
/Users/gagaxiaolong/.virtualenvs/mysite_venv/Extras/lib/python
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/lib-tk
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/lib-old
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/lib-dynload
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/site-packages
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/site-packages/IPython/extensions
但是当我像这样更改目录mysite/mysite时:

(mysite_venv)➜  mysite  tree mysite -I "*.pyc"
mysite
├── __init__.py
├── base.py
├── db.sqlite3
├── local.py
├── urls.py
└── wsgi.py
并将代码
os.environ.setdefault(“DJANGO\u SETTINGS\u MODULE”、“mysite.SETTINGS.local”)
更改为
os.environ.setdefault(“DJANGO\u设置\u模块”、“mysite.local”)
服务器运行正常! 如何解决此问题

PS:当我使用
python manage.py runserver
运行这个项目时,一切都还可以

下面是我的sys.path的外观:

(mysite_venv)➜  mysite  tree mysite -I "*.pyc"
    mysite
    ├── __init__.py
    ├── db.sqlite3
    ├── settings
    │   ├── __init__.py
    │   ├── base.py
    │   └── local.py
    ├── urls.py
    └── wsgi.py
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.local")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)
/Users/gagaxiaolong/PycharmProjects/mysite
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python27.zip
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/plat-darwin
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/plat-mac
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/plat-mac/lib-scriptpackages
/Users/gagaxiaolong/.virtualenvs/mysite_venv/Extras/lib/python
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/lib-tk
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/lib-old
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/lib-dynload
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/site-packages
/Users/gagaxiaolong/.virtualenvs/mysite_venv/lib/python2.7/site-packages/IPython/extensions

9个月前有一个类似的问题:我尝试了答案中提到的方法,但没有成功。

您需要在manage.py文件中检查
sys.path
(使用pdb)。我认为这是因为您有一个类似于“parent_dir/mysite/mysite/settings/”的目录结构,并且您的sys.path有一个条目“parent_dir”。因此,系统正在尝试在
父目录/mysite
中查找
设置
模块。将manage.py更改为debug

import os
import sys

if __name__ == "__main__":
    import ipdb; ipdb.set_trace()
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.local")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

您需要检查manage.py文件中的
sys.path
(为此使用pdb)。我认为这是因为您有一个类似于“parent_dir/mysite/mysite/settings/”的目录结构,并且您的sys.path有一个条目“parent_dir”。因此,系统正在尝试在
父目录/mysite
中查找
设置
模块。将manage.py更改为debug

import os
import sys

if __name__ == "__main__":
    import ipdb; ipdb.set_trace()
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.local")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

在使用Apache/mod_wsgi时建议使用
pdb
或类似的方法并不一定是一个好主意,因为设置起来并不是那么简单。这是因为进程已被妖魔化,并且没有连接的终端,因此您无法通过终端轻松与之交互。使用runserver进行调试,而不是在apache上(在远程服务器上)。如果您在apache上运行时对path感兴趣,请添加日志。在使用apache/mod_wsgi时建议使用
pdb
或类似方法并不一定是一个好主意,因为设置起来并不是那么简单。这是因为进程已被妖魔化,并且没有连接的终端,因此您无法通过终端轻松与之交互。使用runserver进行调试,而不是在apache上(在远程服务器上)。如果您在apache上运行时对path感兴趣,请添加日志。如果您正在运行多个Django站点,请确保您在
wsgi.py
文件中阅读并记录有关使用
os.environ.setdefault()
的警告。如果您正在运行多个Django站点,确保您阅读了
wsgi.py
文件中有关使用
os.environ.setdefault()
的警告,并记下了警告的标题。