如何更改mod_python使用的Python版本

2 投票
3 回答
4976 浏览
提问于 2025-04-15 18:32

我正在学习django,这个框架到目前为止感觉非常简单(而且有趣)。不过,我一直在使用我安装在/opt/local的Python 2.6,因为红帽系统自带的是2.4版本。我设置了一个符号链接:

/usr/bin/python2.6 -> /opt/local/bin/python

到目前为止,我一直用这个链接来处理所有django的事情;也就是说:

> python2.6 manage.py runserver

但是,当我尝试切换到生产模式时,mod_python却没有使用正确的Python版本:

Mod_python error: "PythonHandler django.core.handlers.modpython"

Traceback (most recent call last):

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 287, in HandlerDispatch
    log=debug)

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 461, in import_module
    f, p, d = imp.find_module(parts[i], path)

ImportError: No module named django

我在我的/etc/httpd/conf/httpd.conf文件中有这个设置:

<Location "/chat">
 SetHandler python-program
 PythonHandler django.core.handlers.modpython
 SetEnv DJANGO_SETTINGS_MODULE chat.settings
 PythonDebug On
 PythonPath "['/www/django/chat', '/opt/local/lib/python2.6/site-packages/django/'] + sys.path"
</Location>

所以我的问题是,如何让mod_python去找Python 2.6,而不是默认的Python?

3 个回答

2

你可以重新编译 mod_python,让它动态链接到 libpython,这样就能在 libpython 更新版本时自动适应,但这个过程有点复杂。

你需要按照下面的方式修改 mod_python 的配置脚本(去掉 -L${PyLIBPL}):

$ diff  configure.orig configure 
<   LDFLAGS="${LDFLAGS} -L${PyLIBPL}"
---
>   LDFLAGS="${LDFLAGS}"

然后执行:

configure --with-python=/path/to/bin/python ; make; make install 的步骤。

当你运行:

ldd mod_python.so

时,你应该能看到类似下面的内容:

libpython2.6.so.1.0 => /usr/lib/libpython2.6.so.1.0

3

不要再使用mod_python了。现在推荐使用mod_wsgi来部署Django应用。

4

你需要重新编译mod_python,让它适配你的python2.6版本。因为mod_python在加载python的时候,是把它当作一个库来用的,所以这个版本是在编译的时候就确定下来的。

撰写回答