Ich verwende einen uwsgi-Kaiser mit verschiedenen Vasallen, die jeweils eine bestimmte Python-App aus einer anderen virtuellen Umgebung bedienen. Da uwsgi mit einem eigenen Python 2.7-Interpreter kompiliert wurde, führt der Versuch, eine virtuelle Umgebung mit Python 3 zu verwenden, in vassal.log zu folgendem Fehler:
ImportError: No module named site
Ich glaube, der Grund für diesen Fehler ist, dass uwsgi seinen integrierten Python 2.7-Interpreter verwendet, während das Verzeichnis virtualenv, in dem es ausgeführt wird, nur Python 3-Interpreter unterstützt. In der Tat pip install uwsgi
verschwindet der Fehler , wenn ich ein anderes uwsgi verwende (indem ich es einfach in derselben virtuellen Umgebung installiere). Ich möchte jedoch, dass ein Kaiser über mehrere verschiedene virtuelle Umgebungen herrscht, daher ist die Installation eines separaten UWSGI in jedem keine Option.
Nach dieser Antwort auf Stackoverflow besteht der richtige Weg, dies zu lösen, darin, uwsgi mit verschiedenen Python-Interpreten als ladbare Module zu kompilieren. Bevor ich mich zu diesem Ansatz verpflichte, möchte ich wissen, wie ich meine Vasallen so konfigurieren kann, dass sie jeweils ein anderes Interpreter-Plugin verwenden.
Im Moment habe ich einen Kaiser, der von meinem /etc/rc.local mit den folgenden Einstellungen gestartet wird:
[uwsgi]
uid = www-data
gid = www-data
master = true
emperor = /etc/uwsgi/vassals
daemonize = /var/log/uwsgi/emperor.log
Dann habe ich ein paar Vasallen mit INI-Dateien wie diesen:
[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
Ich habe kein Problem damit, eine optimierte Version von uwsgi mit mehreren Interpreter-Plugins zu kompilieren, aber ich möchte wissen, was ich in meiner Konfiguration ändern muss, um diese separaten Interpreter tatsächlich zu verwenden . Kann ich nur eine vassal.ini sagen:
plugin = python3.4
und in einem anderen:
plugin = python2.7
?
Bitte helfen Sie mir herauszufinden, wie Sie Python 2.7- und Python 3-Virtualenvs unter demselben uwsgi Emperor kombinieren können.
plugins=python3
oderplugins=python36