J'exécute un empereur uwsgi avec divers vassaux qui servent chacun une application Python spécifique à partir d'un virtualenv différent. Puisque uwsgi a été compilé avec son propre interpréteur Python 2.7, essayer d'utiliser un virtualenv avec Python 3 dans celui-ci produit l'erreur suivante dans vassal.log:
ImportError: No module named site
Je crois que l'origine de cette erreur est que uwsgi utilise son interpréteur Python 2.7 intégré, tandis que le répertoire virtualenv dans lequel il s'exécute ne prend en charge que les interprètes Python 3. En effet, lorsque j'utilise un autre uwsgi (simplement en l'installant avec pip install uwsgi
dans le même virtualenv), l'erreur disparaît. Cependant, j'aimerais qu'un empereur règne sur plusieurs virtualenv différents, donc installer un uwsgi séparé dans chacun n'est pas une option.
Selon cette réponse sur Stackoverflow, la bonne façon de résoudre ce problème consiste à compiler uwsgi avec différents interprètes Python sous forme de modules chargeables. Avant de m'engager dans cette approche, j'aimerais savoir comment je peux configurer mes Vassals pour utiliser chacun un autre plugin d'interpréteur.
En ce moment, j'ai un empereur qui est démarré à partir de mon /etc/rc.local avec les paramètres suivants:
[uwsgi]
uid = www-data
gid = www-data
master = true
emperor = /etc/uwsgi/vassals
daemonize = /var/log/uwsgi/emperor.log
Ensuite, j'ai un tas de Vassaux avec des fichiers ini comme celui-ci:
[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
Je n'ai aucun problème à compiler une version modifiée de uwsgi avec plusieurs plugins d'interpréteur, mais j'aimerais savoir ce que je dois changer dans ma configuration pour utiliser réellement ces interprètes séparés. Puis-je simplement dire un vassal.ini:
plugin = python3.4
et dans un autre:
plugin = python2.7
?
S'il vous plaît, aidez-moi à comprendre comment combiner Python 2.7 et Python 3 virtualenvs sous le même empereur uwsgi.
plugins=python3
ouplugins=python36