【发布时间】:2014-07-09 02:29:16
【问题描述】:
我正在尝试将 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
首先,我仔细检查了哪个 python mod_wsgi 正在使用:
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 是针对哪个 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?
相关:
【问题讨论】:
-
见stackoverflow.com/a/23248187/2428955也许你的wsgi.py需要一个明确的路径直接在里面。
-
@Ambroise 谢谢。当然,这可行,但这意味着我必须为我可能想要的所有模块显式添加路径,这会将特定于机器的配置添加到我的 wsgi.py 中,这不是必需的。
标签: django python-2.7 apache2 mod-wsgi python-import