python - uwsgi 指定 python 二进制文件

标签 python ubuntu uwsgi

在我们的生产服务器上,我们运行的是 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 安装不是更好吗?

关于python - uwsgi 指定 python 二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12723016/

相关文章:

python - uWSGI返回旧数据

python - beautifulsoup 表树 : find all tr between two objects?

Python - 同一行代码仅在第二次调用时有效?

python - 你如何在 Ruby 中做等同于 python 的列表切片?

linux - 更新Xubuntu依赖

apache - 如何在 Ubuntu 上同时运行 nginx 和 Apache?

python - 如何使用 boto3 获取 VPC 的流日志 ID

ubuntu - bluez-tools bt-adapter -d 需要在下次使用前重置 USB 加密狗

运行 python 应用程序时 MySql 访问被拒绝 [Ubuntu 1604/NGINX/uWSGI]

python - 如何配置 uWSGI 以便使用 pdb 进行调试(--honour-stdin 配置问题)