【问题标题】:Import error with django使用 django 导入错误
【发布时间】: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


【解决方案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'。一些 Python 发行版在尝试将它们链接为 MacOS X 样式框架而不是该库时已损坏并且无法正常工作。该选项强制它使用 UNIX 风格的 -L/-l 库链接。

确保您没有设置 WSGIPythonHome 或 WSGIPythonPath。

使用 SetEnv 也不会做任何事情,因为它不会设置进程级别的环境变量。

完成这些更改后,按照 Django 文档站点中的 mod_wsgi 说明返回并部署 Django。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 2015-02-02
    • 2014-05-30
    • 2014-11-22
    • 2012-01-04
    • 2012-12-13
    • 2016-03-06
    相关资源
    最近更新 更多