Estou executando um Imperador uwsgi com vários vassalos, cada um atendendo a um aplicativo Python específico de um virtualenv diferente. Como o uwsgi foi compilado com seu próprio interpretador Python 2.7, tentar usar um virtualenv com o Python 3 produz o seguinte erro no vassal.log:
ImportError: No module named site
Acredito que a origem desse erro é que o uwsgi está usando seu interpretador Python 2.7 embutido, enquanto o diretório virtualenv em que está sendo executado suporta apenas intérpretes Python 3. De fato, quando eu uso outro uwsgi (simplesmente instalando-o pip install uwsgi
no mesmo virtualenv), o erro desaparece. No entanto, eu gostaria que um imperador governasse vários virtualenvs diferentes, portanto, instalar um uwsgi separado em cada um deles não é uma opção.
De acordo com esta resposta no Stackoverflow, o caminho certo para resolver isso é compilar o uwsgi com diferentes intérpretes Python como módulos carregáveis. Antes de me comprometer com essa abordagem, gostaria de saber como posso configurar meus Vassals para usar cada um outro plug-in de intérprete.
No momento, tenho um imperador iniciado no meu /etc/rc.local com as seguintes configurações:
[uwsgi]
uid = www-data
gid = www-data
master = true
emperor = /etc/uwsgi/vassals
daemonize = /var/log/uwsgi/emperor.log
Então eu tenho um monte de vassalos com arquivos ini como este:
[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
Não tenho problema em compilar uma versão aprimorada do uwsgi com vários plugins de intérpretes, mas gostaria de saber o que preciso alterar na minha configuração para realmente usar esses intérpretes separados. Posso apenas dizer um vassal.ini:
plugin = python3.4
e em outro:
plugin = python2.7
?
Por favor, ajude-me a descobrir como combinar os virtualenvs Python 2.7 e Python 3 sob o mesmo Imperador uwsgi.
plugins=python3
ouplugins=python36