san*_*ans 6 python mod-wsgi virtualenv
我用virtualenv创建了两个python环境:
/usr/local/pythonenv/BASELINE
和/usr/local/pythonenv/django1
.两者都是使用--no-site-packages创建的.我使用easy_install将django安装到django1环境中.
我的wsgi.conf文件有这一行来设置Python解释器:
WSGIPythonHome /usr/local/pythonenv/BASELINE
Run Code Online (Sandbox Code Playgroud)
我的django.wsgi文件开头像:
import site
site.addsitedir('/usr/local/pythonenv/django1/lib/python2.7/site-packages')
import os
import sys
Run Code Online (Sandbox Code Playgroud)
但是当我尝试访问我的网站时,我得到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
Run Code Online (Sandbox Code Playgroud)
我很遗憾为什么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]
Run Code Online (Sandbox Code Playgroud)
这将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
Run Code Online (Sandbox Code Playgroud)
所以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可执行文件:/ usr/bin/python",即使它应该是(并且据我所知,它是,因为Python版本:2.7.2)使用/ usr/local/bin目录/蟒蛇.这是正常的吗?
您的 mod_wsgi 可能不是针对 Python 2.7 编译的。您不能将 virtualenv 用于一个针对不同 Python 版本编译的 mod_wsgi 的 Python 版本。
阅读自:
http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Python_Shared_Library
并在该文件中进行检查。
归档时间: |
|
查看次数: |
2820 次 |
最近记录: |