【问题标题】:Web2py in apache mod_wsgi with virtualenvApache mod_wsgi中的Web2py与virtualenv
【发布时间】:2012-07-30 06:49:18
【问题描述】:

我正在部署一个web2py 应用程序,我将通过mod_wsgi 为它提供Apache。我的虚拟主机配置中有以下 WSGI 指令:

  WSGIDaemonProcess web2py user=www-data group=www-data \
                           display-name=%{GROUP}
  WSGIProcessGroup web2py
  WSGIScriptAlias / /var/www/web2py/wsgihandler.py

这是有效的,但它需要系统范围的 python 安装。结果,找不到一些包(因为它们只存在于我的 virtualenv 中)。我想告诉这个特定的虚拟主机(或整个 Apache,如果没有其他方法),在我的虚拟环境中使用 python 安装(/home/myuser/.virtualenvs/python2.7.2/bin)。

是否可以为 Apache 进行配置?或者更好,只是为了我的虚拟主机?我想对系统的其余部分造成尽可能小的影响(具体来说,我不想修改系统范围内使用的默认 python 版本)

【问题讨论】:

    标签: python apache virtualenv web2py


    【解决方案1】:

    在您的wsgihandler.py 顶部添加这个...

    activate_this = '/path/to/virtualenv/bin/activate_this.py'
    execfile(activate_this, dict(__file__=activate_this)
    import sys
    sys.path.insert(0, '/path/to/web2py_dir')
    

    【讨论】:

    • 这将使用虚拟环境中的python,还是仅使用虚拟环境中的包?我的系统python是2.6,我的virtualenv python是2.7。我的 web2py 应用程序需要 2.7。在 activate_this.py 中可以阅读以下注释:“当您必须使用现有的 Python 解释器,而不是 virtualenv bin/python 时,可以使用它”
    • 首先,您需要确保为您的 Python 版本编译了 mod_wsgi。完成此操作后,此配置建议将起作用。
    • 为什么会这样? mod_wsgi 将使用系统 python,或者它的路径中的那个,不是吗?当然,我不需要为我在系统中安装的每个不同的 python 版本编译 mod_wsgi ......此外,我没有编译 mod_wsgi:我是从 Ubuntu 存储库安装它。
    • RE:为什么 mod_wsgi 特定于 python 版本。请阅读 Graham Dumpleton 的 answer here。另请阅读the mod_wsgi wiki entry about VirtualEnv: :请注意,创建此基线环境的 Python 版本必须与编译 mod_wsgi 的 Python 版本相同。不能基于 Python 的不同主要/次要版本混合环境。”
    • 仅供参考:我最终重新编译了 mod_wsgi。为此,我需要使用 --enable-shared 重新编译 python。此外,我需要使用 ldconfig 使 libpython 共享库在系统范围内可用
    猜你喜欢
    • 2017-02-18
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2015-01-23
    • 2011-06-04
    相关资源
    最近更新 更多