Blu*_*ber 5 python ubuntu uwsgi
在我们的生产服务器上,我们运行的是 Ubuntu 12.04,为了确保我们的应用程序在预定义的一致环境中运行,我们使用 Pythonbrew 来编译自定义 Python。我创建了一个将运行我们的 API 服务器的用户,该用户使用 Pythonbrew 创建了自己的 Python 2.7.2 环境,并使用 pip 安装了必要的包。
我还在系统上安装了 uWSGI,它将封装 API 应用程序并通过 mod_wsgi 将其提供给 Apache。问题是我无法让 uWSGI 使用正确的 python 二进制文件。当前配置如下所示:
[uwsgi]
socket = 127.0.0.1:3031
processes = 4
chdir = /home/app/
pythonpath = /home/app
gid = 1002
uid = 1002
module = api
callable = APP
enable-threads = true
Run Code Online (Sandbox Code Playgroud)
当我尝试在终端上运行此配置时:
uwsgi --ini app.ini
Run Code Online (Sandbox Code Playgroud)
它无法导入某些模块。此模块仅安装在 API 用户使用的 Pythonbrew 环境中。问题是 uWSGI 使用 /usr/bin 中的默认 python 二进制文件。
一种解决方案是在API用户的环境中使用pip安装的单独uWSGI,但我真的想使用系统的uWSGI,因为它与操作系统更好地集成。
有没有办法指定应该使用哪个 Python 二进制 uWSGI,然后安装一个单独的?如果我必须安装一个单独的 uWSGI 实例,让它在系统启动时启动的最佳方法是什么?
编辑:刚刚意识到它可能没有使用 python 二进制文件,而只是针对它的库,所以我无法使用 wsgi 的默认安装和非默认 python。但问题仍然存在,将自定义构建的 uWSGI 集成到系统中的最佳方法是什么。
uWSGI(以及mod_wsgi)不使用python二进制文件,而是使用python共享库,因此您必须将uWSGI python插件与pythonbrew用户的特定库链接起来。
有很多技巧可以实现这一点(特别是如果 pythonbrew python 版本与系统版本匹配),我想到的第一个技巧是在其配置文件中指定 pythonbrew 用户的前缀
env = PYTHONHOME=路径
顺便说一句,为您的用户使用 virtualenvs 而不是完整的 python 安装不是更好吗?