mod#wsgi python可以';无法从标准库导入
我使用virtualenv创建了两个python环境:mod#wsgi python可以';无法从标准库导入,python,mod-wsgi,virtualenv,Python,Mod Wsgi,Virtualenv,我使用virtualenv创建了两个python环境: /usr/local/pythonenv/BASELINE和/usr/local/pythonenv/django1。这两个都是使用--没有站点包创建的。 我使用easy_install将django安装到django1环境中 我的wsgi.conf文件有以下行用于设置Python解释器: WSGIPythonHome /usr/local/pythonenv/BASELINE 我的django.wsgi文件的开头如下: import s
/usr/local/pythonenv/BASELINE
和/usr/local/pythonenv/django1
。这两个都是使用--没有站点包创建的。
我使用easy_install将django安装到django1环境中
我的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\u日志包含:
[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。在这方面的建议非常感谢
编辑:所以我能够得到一些调试信息感谢。我将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\u 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版本:2.7.2)。这正常吗?您的mod_wsgi可能没有针对Python 2.7进行编译。不能对一个Python版本使用virtualenv,而mod_wsgi是根据不同的Python版本编译的 阅读:
并检查该文档。是的,这就是问题所在。我认为我已经针对Python2.7编译了mod_wsgi,因为我运行了./configure--with Python=/usr/local/bin/Python,然后进行了make和make install,但这不起作用,因为我的旧对象仍然放在那里。我必须先清理干净,然后再进行构建序列。