2

我正在使用 django 做一些介绍性的工作,到目前为止这看起来真的很容易(而且很有趣),但是我一直在使用我安装在 /opt/local(RedHat 5.3)中的 Python 2.6 来完成所有这些工作,因为 redhat 附带的 python 是 2.4 . 我设置了一个符号链接:

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

到目前为止,我一直将它用于所有 django 的东西;IE

> 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 寻找 python2.6 而不是 python?

4

3 回答 3

4

您必须针对您的 python2.6 安装重建 mod_python。由于 mod_python 将 python 作为库加载,因此版本在编译时是固定的。

于 2010-01-27T14:50:38.150 回答
3

不要再使用 mod_python 了。mod_wsgi 是现在部署 Django 应用程序的推荐方式。

于 2010-01-27T15:47:10.673 回答
2

可以重建 mod_python 以动态链接 libpython,以便您可以获取 libpython 的版本更新,但这需要一些技巧。

您将需要编辑 mod_python 的配置脚本,如下所示(删除 -L${PyLIBPL}):

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

然后做

配置 --with-python=/path/to/bin/python ;制作; 使安装舞蹈。

当你运行时:

ldd mod_python.so

您应该会看到如下所示的一行:

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

于 2010-01-28T20:47:39.423 回答