我在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支持在我的虚拟环境中也不起作用。
答案 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应用程序应该在何处侦听连接。
希望它有所帮助。