Sto eseguendo un imperatore uwsgi con vari Vassals che ognuno serve un'app Python specifica da un virtualenv diverso. Poiché uwsgi è stato compilato con il proprio interprete Python 2.7, il tentativo di utilizzare un virtualenv con Python 3 al suo interno produce il seguente errore in vassal.log:
ImportError: No module named site
Credo che l'origine di questo errore sia che uwsgi sta usando il suo interprete Python 2.7 incorporato, mentre la directory virtualenv in cui è in esecuzione supporta solo gli interpreti Python 3. Infatti, quando uso un altro uwsgi (semplicemente installandolo con pip install uwsgi
nella stessa virtualenv), l'errore scompare. Tuttavia, vorrei che un imperatore regnasse su diversi virtual virtual, quindi installare un uwsgi separato in ciascuno non è un'opzione.
Secondo questa risposta su StackOverflow, il modo giusto per risolverlo è compilare uwsgi con diversi interpreti Python come moduli caricabili. Prima di impegnarmi in questo approccio, vorrei sapere come posso configurare i miei Vassals per utilizzare ciascuno un altro plug-in interprete.
In questo momento ho un imperatore che viene avviato dal mio /etc/rc.local con le seguenti impostazioni:
[uwsgi]
uid = www-data
gid = www-data
master = true
emperor = /etc/uwsgi/vassals
daemonize = /var/log/uwsgi/emperor.log
Poi ho un sacco di Vassals con file ini come questo:
[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
Non ho problemi a compilare una versione ottimizzata di uwsgi con diversi plug-in per interpreti, ma mi piacerebbe sapere cosa devo cambiare nella mia configurazione per utilizzare effettivamente questi interpreti separati. Posso solo dire un vassal.ini:
plugin = python3.4
e in un altro:
plugin = python2.7
?
Ti prego, aiutami a capire come combinare Python 2.7 e Python 3 virtualenvs sotto lo stesso imperatore uwsgi.
plugins=python3
oplugins=python36