![在 RHEL 上使用 Python2.6 而不是 Python2.4 运行 CherryPy 脚本](https://linux22.com/image/556005/%E5%9C%A8%20RHEL%20%E4%B8%8A%E4%BD%BF%E7%94%A8%20Python2.6%20%E8%80%8C%E4%B8%8D%E6%98%AF%20Python2.4%20%E8%BF%90%E8%A1%8C%20CherryPy%20%E8%84%9A%E6%9C%AC.png)
在 RHEL 5 服务器上工作。尝试制作一个小型 CherryPy 应用程序,该应用程序从 URL 中获取参数(例如 internet.com/cherrypy/data/22/45 将返回 22 和 45),然后使用该应用程序查询包含这些参数的 SQL Server。然后以 JSON 格式返回。遇到相当大的障碍。
RHEL 5 附带 Python 2.4,2.4 没有原生 JSON 处理功能,因此我在 2.4 之外还安装了 EPEL 的 Python26。我可以使用 python26 命令运行 2.6,也可以使用普通的 python 命令运行 2.4。我保留 2.4,因为我读到 yum 依赖于 2.4。然后我从 2.4 中删除 CherryPy,并为 2.6 重新安装。我在 Apache2 下使用 Mod_wsgi 运行 CherryPy。因此我推测这可能是问题的根源。我想如果我在 CherryPy 脚本中添加一个 shebang(今天才知道,名字很棒,哈哈。),它会用 2.6 解释它,但它没有,当我转到 CherryPy 应用程序的根目录(internet.com/cherrpy/)时,我仍然收到 500 个错误。这是我目前的脚本:
#!/usr/bin/python2.6
import sys
sys.stdout = sys.stderr
import atexit
import threading
import cherrypy
cherrypy.config.update({'environment': 'embedded'})
class Root(object):
def index(self):
return 'Nothing to see here. Move along.'
index.exposed = True
def data(self, building, ser):
return 'You requested data for SER number: ' + ser + ' in building number: ' + building
data.exposed = True
application = cherrypy.Application(Root(), script_name=None, config=None)
我已经安装了 mod_wsgi 3.2 (mod_wsgi-3.2-1.el5.x86_64.rpm),我相信我是通过 wget 下载的并在本地安装,因为它不在 RHEL 存储库中。
这是我的 httpd.conf 中适用于 CherryPy 的行:
WSGIScriptAlias /cherrypy /fs1/html/data/scripts/test.py
我不确定原因是否是系统上有两个版本的 python,而系统不知道用哪个版本来解释脚本,或者是 mod_wsgi 是罪魁祸首,而我必须重新安装为 2.6 构建的版本(这个问题和相关问题表明)。有谁确切知道我该怎么做吗?
编辑:本指南在 mod_wsgi google 代码页上,指示使用不同版本的 python 参数进行构建。我应该这样做,并传递参数“--with-python=python26”吗?
编辑2:尝试使用以下命令从源代码构建 mod_wsgi:
sudo ./configure --with-python=/usr/bin/python26
但是运行 make 时我看到的是这些垃圾:http://pastebin.com/khzctxDT 我能复制的就这么多了,尝试使用“sudo make > file.txt”将输出写入文件,但出现权限被拒绝错误。我很想拥有 root 权限...
答案1
是的,您需要根据您打算使用的特定 Python 版本重建 mod_wsgi。
正如 mod_wsgi 源代码附带的安装说明中详细说明的要求所述,您必须安装 Python 和 Apache 的开发包。您似乎没有安装 Python 的开发包。
因此,请检查 mod_wsgi 本身提供的安装说明以及以下说明:
http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide