我已经使用virtualenv创建了两个Python环境:
我的wsgi.conf文件有这样一行来设置Python解释器:
但是当我试图访问我的网站时,出现了500错误,httpd/error_log中包含以下内容:
我不明白为什么Python解释器无法导入其自己的标准库。我甚至不确定如何检查httpd是否正在使用位于/usr/local/pythonenv/BASELINE的解释器,这将是一个好的开始。
编辑:无关紧要,但我很犹豫是否应该在此处发布还是在ServerFault上发布。关于这一点的建议将不胜感激。
编辑:因此,我能够获得一些调试信息,感谢http://code.google.com/p/modwsgi/wiki/DebuggingTechniques。我更改了我的django.wsgi脚本,使其包含。
这将把Python解释器的信息放在/var/log/httpd/error_log中。错误输出为:
所以sys.path和sys.executable指向了我的问题。由于某些原因,sys.path使用了一些不存在的lib文件(BASELINE甚至不包含一个lib64目录,并且它是用Python2.7创建的),而sys.executable显示mod_wsgi仍在使用默认的/usr/bin/python解释器,而不是/usr/local/pythonenv/BASELINE/bin中的解释器。
不确定为什么会出现这种情况,但至少我现在知道得更多了。
编辑:这个问题已经解决,但Django仍然列出“Python Executable: /usr/bin/python”,尽管它应该(据我所知)使用/usr/local/bin/python,因为Python Version: 2.7.2。这正常吗?
/usr/local/pythonenv/BASELINE
和 /usr/local/pythonenv/django1
。两者都是使用--no-site-packages选项创建的。
我使用easy_install在django1环境中安装了Django。我的wsgi.conf文件有这样一行来设置Python解释器:
WSGIPythonHome /usr/local/pythonenv/BASELINE
我的django.wsgi文件开头如下:
import site
site.addsitedir('/usr/local/pythonenv/django1/lib/python2.7/site-packages')
import os
import sys
但是当我试图访问我的网站时,出现了500错误,httpd/error_log中包含以下内容:
[error] Traceback (most recent call last):
[error] File "/service/usr/local/django_apps/apache/django.wsgi", line 1, in ?
[error] import site
[error] ImportError: No module named site
我不明白为什么Python解释器无法导入其自己的标准库。我甚至不确定如何检查httpd是否正在使用位于/usr/local/pythonenv/BASELINE的解释器,这将是一个好的开始。
编辑:无关紧要,但我很犹豫是否应该在此处发布还是在ServerFault上发布。关于这一点的建议将不胜感激。
编辑:因此,我能够获得一些调试信息,感谢http://code.google.com/p/modwsgi/wiki/DebuggingTechniques。我更改了我的django.wsgi脚本,使其包含。
import sys
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
print >> environ['wsgi.errors'], sys.path
print >> environ['wsgi.errors'], sys.prefix
print >> environ['wsgi.errors'], sys.executable
response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
这将把Python解释器的信息放在/var/log/httpd/error_log中。错误输出为:
[error] ['/usr/local/pythonenv/BASELINE/lib64/python24.zip', '/usr/local/pythonenv/BASELINE/lib64/python2.4/', '/usr/local/pythonenv/BASELINE/lib64/python2.4/plat-linux2', '/usr/local/pythonenv/BASELINE/lib64/python2.4/lib-tk', '/usr/local/pythonenv/BASELINE/lib64/python2.4/lib-dynload']
[error] /usr/local/pythonenv/BASELINE
[error] /usr/bin/python
所以sys.path和sys.executable指向了我的问题。由于某些原因,sys.path使用了一些不存在的lib文件(BASELINE甚至不包含一个lib64目录,并且它是用Python2.7创建的),而sys.executable显示mod_wsgi仍在使用默认的/usr/bin/python解释器,而不是/usr/local/pythonenv/BASELINE/bin中的解释器。
不确定为什么会出现这种情况,但至少我现在知道得更多了。
编辑:这个问题已经解决,但Django仍然列出“Python Executable: /usr/bin/python”,尽管它应该(据我所知)使用/usr/local/bin/python,因为Python Version: 2.7.2。这正常吗?