我正在运行带有各种附庸的uwsgi Emperor,每个附庸都服务于来自不同virtualenv的特定Python应用程序。由于uwsgi是使用其自己的Python 2.7解释器编译的,因此尝试在其中使用带有Python 3的virtualenv会在vassal.log中产生以下错误:
ImportError: No module named site
我相信这个错误的根源是uwsgi使用其内置的Python 2.7解释器,而它运行的virtualenv目录仅支持Python 3解释器。确实,当我使用另一个uwsgi时(只需通过pip install uwsgi
在同一virtualenv中安装它),该错误就会消失。但是,我希望一个Emperor可以统治多个不同的virtualenv,因此,在每个中安装一个单独的uwsgi并不是一种选择。
根据关于Stackoverflow的答案,解决此问题的正确方法是使用不同的Python解释器将uwsgi编译为可加载模块。在我采用这种方法之前,我想知道如何配置我的Vassals以使用每个解释器插件。
现在,我有一个从/etc/rc.local启动的Emperor,具有以下设置:
[uwsgi]
uid = www-data
gid = www-data
master = true
emperor = /etc/uwsgi/vassals
daemonize = /var/log/uwsgi/emperor.log
然后我有一堆带有ini文件的Vassals,如下所示:
[uwsgi]
master = false
single-interpreter = true
socket = /tmp/%n.sock
virtualenv = /home/user/.virtualenvs/djangoproject
chdir = /home/user/djangoproject
wsgi-file = project/wsgi.py
logto = /var/log/uwsgi/%n.log
使用几个解释器插件编译uwsgi的调整版本没有问题,但是我想知道我必须更改配置才能实际使用这些单独的解释器。我可以说一个vassal.ini:
plugin = python3.4
在另一个:
plugin = python2.7
?
请帮助我找出如何在同一uwsgi Emperor下结合使用Python 2.7和Python 3 virtualenvs。
plugins=python3
或plugins=python36