如何在Ubuntu的虚拟环境中为uwsgi安装gevent插件?

时间:2018-02-13 05:26:14

标签: python ssl uwsgi gevent

我在ubuntu 16.04 中运行 uWSGI(2.0.16)

当我从root运行uWSGI时,它运行正常。但是,当我在虚拟环境中运行uWSGI时,会出现以下错误: -

uwsgi: unrecognized option '--gevent'
getopt_long() error

然后我在我的虚拟环境中检查uWSGI的插件列表,发现gevent插件丢失了。

根据 uWSGI> = 1.4

的uWSGI文档
  

默认配置文件默认编译gevent插件   用来。执行以下操作将安装python插件以及   gevent one:

     

pip install uwsgi

但是pip install uwsgi安装uwsgi,我仍然无法在虚拟环境中获得gevent插件。但是,以类似的方式,当我在虚拟环境外安装uwsgi时,gevent插件已经可用。

我已经尝试安装 uwsgi-plugin-gevent-python

我必须使用 SSL 支持构建uwsgi,因此我使用CFLAGS来构建uWSGI。 ssl支持在我的虚拟环境中也不起作用。

2 个答案:

答案 0 :(得分:1)

由于这个问题在“ uwsgi build plugin gevent support”的许多变体中排名很高,我认为它可以使用答案。

您可以通过运行以下命令来验证uwsgi是否未加载gevent插件:

$ uwsgi --plugins-list

如果gevent中未列出*** uWSGI loaded generic plugins ***,则可以对其进行编译,这是针对python 3.4的方法(我在这里使用Ubuntu 14.04):

$ PYTHON=/usr/bin/python3.4 uwsgi --build-plugin "$UWSGI_DIR/plugins/gevent gevent34"

其中UWSGI_DIR是uwsgi安装的目录路径。

如果出现类似以下错误:

fatal error: Python.h: No such file or directory
 #include <Python.h>

您可能缺少python3-dev工具,在Ubuntu中,您可以使用以下工具安装这些工具:

$ apt-get install python3-dev

然后重新运行build plugin命令。

如果没有错误,那么您现在应该在gevent34_plugin.so中有一个名为UWSGI_DIR的插件。您现在可以在启动时加载它:

$ uwsgi --plugins-dir $UWSGI_DIR --plugin gevent34 --plugins-list

gevent应该在*** uWSGI loaded generic plugins ***部分的某个位置列出。

答案 1 :(得分:0)

你是否在virtualenv中安装了gevent?您是否指定了要生成的异步核心数?

我使用以下代码运行它:

pip install uwsgi gevent
uwsgi --gevent 10

当然,您应该添加配置以指定要运行的应用程序以及uswgi应用程序应该在何处侦听连接。

希望它有所帮助。