如何更改mod_python使用的Python版本
我正在学习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的时候,是把它当作一个库来用的,所以这个版本是在编译的时候就确定下来的。