使用django导入错误

时间:2014-05-20 17:32:05

标签: django python-2.7 apache2 mod-wsgi python-import

我正在尝试将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上。

嗯,也许mod_wsgi没有得到我的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?

相关:

1 个答案:

答案 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。