ImportError: No module named django.core.handlers.wsgi in install django mod_wsgi config on apache
Posted
技术标签:
【中文标题】ImportError: No module named django.core.handlers.wsgi in install django mod_wsgi config on apache【英文标题】: 【发布时间】:2011-04-04 19:47:24 【问题描述】:我尝试安装 django 以使用 apache 和 mod_wsgi,但收到此错误:
ImportError: No module named django.core.handlers.wsgi,
我读到可能是用户错误...
在控制台 (ssh) 上,通过 root 访问,我访问 django.core.handlers.wsgi 没有任何问题,但是当 apache 要求访问它时,它不能
我的 django.wsgi:
import os
import sys
sys.path.append('my/rep/parents/of/my/project')
sys.path.append('/usr/lib/python2.4/site-packages/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'montest.settings'
os.environ['PYTHON_EGG_CACHE'] = '/tmp'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
我的 vhost.conf:
Alias /media/ my/rep/parents/of/my/projet/montest/media/
<Directory my/rep/parents/of/my/projet/montest/media>
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias /montest my/rep/parents/of/my/projet/django.wsgi
<Directory my/rep/parents/of/my/projet>
Order deny,allow
Allow from all
</Directory>
编辑:
好的,我的结果是 ldd mod_wsgi.so
linux-gate.so.1 => (0x0013c000)
libpython2.6.so.1.0 => /usr/lib/libpython2.6.so.1.0 (0x00663000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00bff000)
libdl.so.2 => /lib/libdl.so.2 (0x0023b000)
libutil.so.1 => /lib/libutil.so.1 (0x00420000)
libm.so.6 => /lib/libm.so.6 (0x00110000)
libc.so.6 => /lib/libc.so.6 (0x00240000) /lib/ld-linux.so.2 (0x0059f000)
所以我决定用 test.wsgi 测试我的 mod_wsgi 安装
test.wsgi
def application(environ, start_response):
status = '200 OK'
output = 'Hello world, I am a wsgi app!'
response_headers = [('Content-Type', 'text/plain'), ('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
我的 vhost.conf:
WSGIScriptAlias /test /var/www/vhosts/mydomain.fr/subdomains/django/httpdocs/test.wsgi
<Directory /var/www/vhosts/mydomain.fr/subdomains/django/httpdocs>
Order allow,deny
Allow from all
Options +ExecCGI
</Directory>
它现在可以工作了...接下来我将尝试我的 django.wsgi 配置
【问题讨论】:
您应该在配置中使用绝对路径。你为什么用“我的”开始路径? 导致我提出这个问题的至少部分问题最终是我移动了我的 django 基本安装目录.. Soo.. Yeaaaaaah。德普。 【参考方案1】:你好!
如果您使用 Linux(Debian、Ubuntu 等)的 deb-distributive,请编辑该文件
/etc/apache2/modules/wsgi.load
此文件包含更正 wsgi-library 的路径(适用于活动版本的 Python 解释器)。如果你使用Python2.6,请更改字符串
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-2.7
到
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-2.6
另外,您可以更改 mod_wsgi 模块的软链接:
cd /usr/lib/apache2/modules
ln -s mod_wsgi.so-2.6 mod_wsgi.so
不要忘记更改 /etc/apache2/modules/wsgi.load 中文件的链接 并重新启动 apache 服务器
service apache2 restart
附:对不起我的英语不好
【讨论】:
【参考方案2】:错误:
WSGIDaemonProcess www.example.com python-path=~/virtualenvs/virt1/lib/python2.7
对:
WSGIDaemonProcess www.example.com python-path=/home/user/virtualenvs/virt1/lib/python2.7
我花了太多时间试图弄清楚为什么我的 virtualenv 没有正确加载 django。
【讨论】:
neurosnap 像你一样,我也花了太多时间试图弄清楚为什么我的 virtualenv 没有正确加载 django。这有效....【参考方案3】:检查您的站点包文件权限。 在我修复文件权限之前,上述解决方案都不适合我。 这是我的 ssl_error_log 文件中的内容:
mod_wsgi (pid=986, process='OSQA', application='xxxxxx.yyy.com|/forum'): Loading WSGI script '/data/http/osqa/osqa.wsgi'.
mod_wsgi (pid=986): Target WSGI script '/data/http/osqa/osqa.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=986): Exception occurred processing WSGI script '/data/http/osqa/osqa.wsgi'. Traceback (most recent call last): File "/data/http/osqa/osqa.wsgi", line 14, in <module>
import django.core.handlers.wsgi ImportError: No module named django.core.handlers.wsgi
但我在我的服务器上解决了它。如果您可以在命令行上执行此操作,那么此解决方案适合您:
python
>>> import django.core.handlers.wsgi
>>>
有效的是我 chmod go+rx site-packages libpython* (这可能有点矫枉过正,但它对我有用。)
我以 apache.user 身份运行 httpd,并以 root 身份运行 python,可以正常查看包,但我的权限设置不正确(所有人都可以阅读),这就是 httpd 无法读取包的原因.
【讨论】:
虽然不是我的确切问题,但这导致了我的问题:我有两个具有不同 virtualenv 路径的 django 应用程序venv
vs env
,但我重新使用了我的 django.wsgi - 谢谢!!!【参考方案4】:
我通过添加站点包的位置解决了这个问题,我将 django 子目录 (/Library/python/2.7/site-packages) 保存到 WSGIDaemonProcess:
WSGIDaemonProcess www.example.com processes=2 threads=15 display-name=%GROUP
python-path=/Library/python/2.7/site-packages
如果您使用嵌入式服务器模式,请使用 httpd.conf
:
WSGIPythonPath /Library/python/2.7/site-packages
【讨论】:
我的路径最终是 /usr/local/lib/python2.7/site-packages 是的,我在 virtualenv 中有这个。这就是为我解决的问题【参考方案5】:如果你从旧的 python 库中删除 django 会更好。
[root@lts5srv1]# rm -rf /root/epd-5.1.0/lib/python2.5/site-packages/django
..并在您正在使用的当前 python 的“站点包”文件夹中重新安装它:
[root@lts5srv1 Django-1.4.1]# /usr/local/bin/python2.6 setup.py install
这就是我所做的,我不再收到那个错误了!
【讨论】:
【参考方案6】:我通过将保存我的 django 安装的父目录添加到 wsgi.py 中的 sys.path 解决了这个问题。这是我的设置,FWIW:
/home/banjer/myproject/wsgi.py:
import os, sys
sys.path.append('/home/banjer/django')
sys.path.append('/home/banjer') # this line solved it
sys.executable = '/usr/local/python-2.7.2/bin/python'
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
【讨论】:
【参考方案7】:我知道这是一个有点老的问题,但我想我会为未来可能会发现这个问题的 SO 用户插话:
您的 mod_wsgi 链接到 python2.6,但您正在使用 python 2.4 根据您的配置运行 django?
我将假设您的 /usr/bin/python 指向的不是 2.6,这是 mod_wsgi 编译时所针对的。这也可能是由于您正在针对 2.4 运行 django。当 django 使用 python2.7 时,当我加载与 python2.6 链接的 mod_wsgi 时,我收到了同样的错误。使用我安装的 mod_wsgi 版本 - 它同时支持 python2.[6-7],所以我所要做的就是删除 /usr/lib/apache2/modules/ 中 mod_wsgi.so -> mod_wsgi 的符号链接.so-2.6 并将其更改为 mod_wsgi.so -> mod_wsgi.so-2.7。
很简单。
【讨论】:
【参考方案8】:您为什么还要尝试将 site-packages 目录添加到 sys.path 中?如果您的 mod_wsgi 是针对 Python 2.4 编译的,那么它应该已经在 site-packages 目录中查找。听起来你的 mod_wsgi 甚至没有针对 Python 2.4 编译。
运行:
ldd mod_wsgi.so
根据您安装的 mod_wsgi.so 文件计算出编译的 Python 版本并发布结果。
【讨论】:
因为他们使用的不是 2.4 而是 2.7。可能是因为他们安装了多个版本 您不能强制为特定 Python 版本编译的 mod_wsgi.so 使用不同的 Python 版本。实际需要的 Python 库实际上嵌入/链接到 mod_wsgi.so。他们说最终工作的配置仍然被破坏。 你是对的。我遇到了同样的问题,然后我意识到即使我创建了一个 virtualenv 我也遇到了错误,原因是 mod_wsgi 是为另一个 python 版本编译的。【参考方案9】:我之前也遇到过这个问题,这是因为 Apache/mod_wsgi 进程没有读取模块的权限。您可以使您的 site-packages/django 目录对世界可读,或添加其他适当的用户/组权限。
【讨论】:
需要对我的站点包目录的读取和执行权限。只读对我不起作用。 需要写入权限才能写入已编译的 (.pyc
) 文件。 pip
具有 compile
选项以相应地进行预编译。【参考方案10】:
这行肯定是错的:
sys.path.append('/usr/lib/python2.4/site-packages/django')
使用/用于构建 mod_wsgi 的 Python 版本安装 Django。
【讨论】:
i v 阅读:“可以使用 Python 2.3 以后的 Python 2.X 版本”code.google.com/p/modwsgi/wiki/QuickInstallationGuide 是的......你说我需要为 python2.4 安装 mod_wsgi 如果我在我的 django 中使用 python2.4 吗?正确吗? 或者你需要为 mod_wsgi 适用的任何 Python 版本安装 Django。以上是关于ImportError: No module named django.core.handlers.wsgi in install django mod_wsgi config on apache的主要内容,如果未能解决你的问题,请参考以下文章
ImportError : No module named graphics
python27 ImportError: No module named site
Python中ImportError: No module named request
ImportError: No module named win32api