我正在尝试将Django用于我的下一个Web项目,并且(想)我安装好了所有东西,但我尝试访问我的网站(一个最小的新django项目),我得到500错误。
我的设置使用apache,mod_wsgi,并且我使用我的mac进行开发。
查看apache错误日志,我看到了
ImportError: Could not import settings 'mysite.settings'
(Is it on sys.path? Is there an import error in the settings file?):
No module named mysite.settings
首先,我仔细检查mod_wsgi使用的是哪个python:
wpa072077:mysite enewe101$ otool -L /usr/local/Cellar/mod_wsgi/3.3/libexec/mod_wsgi.so
/usr/local/Cellar/mod_wsgi/3.3/libexec/mod_wsgi.so:
/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 635.21.0)
好的,所以我启动了那个python并尝试导入mysite.settings - 它没有问题,因为我把它放在我的PYTHONPATH
上。
PYTHONPATH
?所以我尝试将其添加到我的网站的http.conf
部分中的Virtual Host
:
SetEnv PYTHONPATH /Users/enewe101/projects/mysite/src
(mysite模块位于/Users/enewe101/projects/mysite/src/mysite
,它应包含__init__.py
最后一件事:我的机器上有两个版本的python。正如我所提到的,我检查了哪一个mod_wsgi被编译,如果我为那个输入REPL,我可以导入mysite.settings
没问题。但是,我实际上希望mod_wsgi使用不同的python - 但相同的版本(均为2.7)。我尝试通过将它放在httpd.conf中来强制mod_wsgi使用我想要的python:
WSGIPythonHome /Library/Frameworks/EPD64.framework/Versions/7.3
WSGIPythonPath /Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages:/Library/Python/2.7/site-packages:/Users/enewe101/projects/mysite/src
但它导致服务器根本没有响应 - 我的浏览器旋转直到我不耐烦。
如何解决此导入错误,最好让mod_wsgi使用正确的python?
相关:
答案 0 :(得分:1)
如果mod_wsgi.so在使用工具-L检查时发现了错误的库,则需要再次从源代码重新编译它:
make distclean
./configure --disable-framework --with-python=/Library/Frameworks/EPD64.framework/Versions/7.3/bin/python
make
sudo make install
关键是' - disable-framework'。当尝试将它们链接为MacOS X样式框架而不是该库时,一些Python发行版被破坏并且无法正常工作。该选项强制它使用UNIX样式-L / -l库链接。
确保您不要设置WSGIPythonHome或WSGIPythonPath。
使用SetEnv也不会做任何事情,因为它没有设置进程级环境变量。
通过这些更改,然后按照Django docs站点中的mod_wsgi说明返回并部署Django。