Différentes versions de Python sous le même empereur uwsgi?

Je suis en train d'exécuter un empereur uwsgi avec divers Vassals qui servent chacun une application spécifique de Python à partir d'un virtuel différent. Étant donné que uwsgi a été compilé avec son propre interpréteur Python 2.7, essayer d'utiliser un virtualenv avec Python 3 engendre 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 embedded Python 2.7, alors que le directory virtualenv qu'il exécute prend uniquement en charge 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ègle plusieurs versions virtuelles différentes, donc l'installation d'un uwsgi distinct dans chaque cas n'est pas une option.

Selon cette réponse sur Stackoverflow, The Right Way pour résoudre ce problème consiste à comstackr uwsgi avec différents interprètes Python comme modules chargeables. Avant de m'engager dans cette approche, j'aimerais savoir comment configurer mes Vassals pour utiliser un autre plugin d'interprète.

À l'heure actuelle, j'ai un Empereur qui commence à partir de mon /etc/rc.local avec les parameters 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 files ini comme ceci:

 [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 à comstackr une version tweaked d'uwsgi avec plusieurs plugins d'interprète, mais j'aimerais savoir ce que je dois modifier dans ma configuration pour utiliser ces interprètes distincts. Puis-je dire un vassal.ini:

 plugin = python3.4 

et dans un autre:

 plugin = python2.7 

?

Aidez-moi à comprendre comment combiner Python 2.7 et Python 3 virtualenvs sous le même empereur uwsgi.

Eh bien, puisque je n'étais pas totalement accablé par les réponses, voici la solution que je me suis faite:

D'abord, j'ai créé un nouveau virtualenv avec un interpréteur Python 3:

 mkvirtualenv -p /usr/bin/python3 python3env 

Ensuite, j'ai installé le stock uwsgi de Pypi, qui est compilé automatiquement avec un interprète Python 3:

 pip install uwsgi 

J'ai créé un directory de configuration /etc/uwsgi-python3 qui contient les vassaux emperor.ini et un sous-directory contenant vassal.ini. Enfin, j'ai ajouté la ligne suivante à /etc/rc.local

 /home/user/.virtualenvs/python3env/bin/uwsgi --ini /etc/uwsgi-python3/emperor.ini 

Maintenant, il y a un emperor d'uwsgi qui utilise l'interprète Python 3 pour ses vassaux. Cela n'interfère pas avec un autre empereur uwsgi qui fonctionnait déjà et utilise l'interpréteur Python 2.7.

Je sais que ce n'est pas optimal, parce que je n'utilise pas l'architecture d'interprète enfichable qui est expliquée dans la documentation (merci roberto! Je ne sais pas comment j'aurais pu négliger ça). Cependant, il fonctionne sans problème et je n'ai pas eu à toucher l'installation existante d'uwsgi qui sert de nombreuses applications de production.