【问题标题】:How do I change which version of python mod_python uses如何更改 python mod_python 使用的版本
【发布时间】:2011-01-10 00:00:52
【问题描述】:

我正在用 django 做一些介绍性的工作,到目前为止这看起来真的很容易(而且很有趣),但是我一直在使用 Python 2.6 做这一切,我安装在 /opt/local (RedHat 5.3) 中,因为 python 附带红帽是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 寻找 python2.6 而不是 python?

【问题讨论】:

    标签: python django apache mod-python


    【解决方案1】:

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

    【讨论】:

    • 你不会碰巧知道 apxs 在 RedHat 5.3 上的位置吧?
    • @puddingfox 它位于 /usr/sbin/apxs 的 httpd-devel 包中
    【解决方案2】:

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

    【讨论】:

    • 我要学究气了。你说得对。 mod_wsgi 是推荐的方式。在某些情况下 mod_python 可能是更好的选择。首先,如果您有一个企业 Linux 的较旧发行版,并且您的 apache 是静态链接的,并且您没有重新编译的选项。从 yum repos 获取预编译的 mod-python 可能更容易。如果你想完全解耦 python 和 apache,并且速度不是问题,你可以使用 fastcgi。只是说,推荐并不总是最好的
    • 这个显然没有帮助的答案是我需要阅读的内容,以意识到我必须删除一个挥之不去的 mod_python 安装。
    【解决方案3】:

    可以重建 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

    【讨论】:

      猜你喜欢
      • 2016-08-13
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      相关资源
      最近更新 更多