uwsgi指定python二进制文件

在我们的生产服务器上,我们运行的是Ubuntu 12.04,以确保我们的应用程序在预定义的一致环境中运行,我们使用
Pythonbrew来编译自定义Python.我创建了一个将运行我们的API服务器的用户,用户拥有自己的Python 2.7.2环境,使用Pythonbrew创建,并使用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

当我尝试在终端上运行此配置时:

uwsgi --ini app.ini

它无法导入某些模块.此模块仅安装在API用户正在使用的Pythonbrew环境中.问题是uWSGI在/usr/bin中使用了默认的python二进制文件.

一种解决方案是使用在API用户环境中使用pip安装的单独uWSGI,但我真的想使用系统的uWSGI,因为它与操作系统更好地集成.

有没有办法指定uWSGI应该使用哪个Python二进制文件,除了安装一个单独的二进制文件?如果我必须安装一个单独的uWSGI实例,那么在系统启动时启动它的最佳方法是什么?

编辑:刚才意识到它可能没有使用python二进制文件,而只是衬着它的库,所以我无法使用wsgi的默认安装和非默认的python.但问题仍然存在,将定制的uWSGI集成到系统中的最佳方法是什么.

最佳答案 uWSGI(以及mod_wsgi)不使用python二进制文件,而是使用python共享库,因此必须将uWSGI python插件与pythonbrew用户的特定库链接.

有很多技巧可以完成(特别是如果pythonbrew python版本与系统版本匹配),第一个突然出现在我的脑海中的是在其配置文件中指定pythonbrew用户的前缀

env = PYTHONHOME =路径

顺便说一下,为用户使用virtualenvs而不是完整的python安装是不是更好?

点赞