Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mod#wsgi python可以';无法从标准库导入_Python_Mod Wsgi_Virtualenv - Fatal编程技术网

mod#wsgi 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

我使用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 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,但这不起作用,因为我的旧对象仍然放在那里。我必须先清理干净,然后再进行构建序列。