Я управляю uwsgi Emperor с различными вассалами, каждый из которых обслуживает определенное приложение Python из разных virtualenv. Поскольку uwsgi был скомпилирован с собственным интерпретатором Python 2.7, попытка использовать virtualenv с Python 3 в нем приводит к следующей ошибке в vassal.log:
ImportError: No module named site
Я полагаю, что причиной этой ошибки является то, что uwsgi использует встроенный интерпретатор Python 2.7, а каталог virtualenv, в котором он работает, поддерживает только интерпретаторы Python 3. Действительно, когда я использую другой uwsgi (просто установив его pip install uwsgi
в тот же virtualenv), ошибка исчезает. Однако, я бы хотел, чтобы один Император управлял несколькими разными virtualenvs, поэтому установка отдельного uwsgi в каждом из них не вариант.
Согласно этому ответу о Stackoverflow, правильный способ решить эту проблему - это скомпилировать uwsgi с различными интерпретаторами Python в качестве загружаемых модулей. Прежде чем перейти к такому подходу, я хотел бы узнать, как я могу настроить своих Vassals для каждого использования другого плагина интерпретатора.
Прямо сейчас у меня есть один Emperor, который запускается из моего /etc/rc.local со следующими настройками:
[uwsgi]
uid = www-data
gid = www-data
master = true
emperor = /etc/uwsgi/vassals
daemonize = /var/log/uwsgi/emperor.log
Тогда у меня есть куча вассалов с INI-файлами вроде этого:
[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
У меня нет проблем с компиляцией измененной версии uwsgi с несколькими плагинами интерпретатора, но я хотел бы знать, что мне нужно изменить в моей конфигурации, чтобы фактически использовать эти отдельные интерпретаторы. Могу я просто сказать один vassal.ini:
plugin = python3.4
а в другом:
plugin = python2.7
?
Пожалуйста, помогите мне понять, как объединить Python 2.7 и Python 3 virtualenvs под одним и тем же uwsgi Emperor.
plugins=python3
илиplugins=python36