私は、それぞれ異なるvirtualenvから特定のPythonアプリを提供するさまざまなVassalsでuwsgi Emperorを実行しています。uwsgiは独自のPython 2.7インタープリターでコンパイルされているため、Python 3でvirtualenvを使用しようとすると、vassal.logに次のエラーが発生します。
ImportError: No module named site
このエラーの原因は、uwsgiが組み込みのPython 2.7インタープリターを使用しているのに対し、それが実行されているvirtualenvディレクトリーはPython 3インタープリターしかサポートしていないことだと思います。実際、別のuwsgiを使用すると(pip install uwsgi
同じvirtualenvにインストールするだけで)、エラーが表示されなくなります。ただし、1つの皇帝に複数の異なるvirtualenvを支配してもらいたいので、それぞれに個別のuwsgiをインストールすることはできません。
Stackoverflowに関するこの回答によると、これを解決する正しい方法は、ロード可能なモジュールとして異なるPythonインタープリターでuwsgiをコンパイルすることです。このアプローチに取り組む前に、それぞれのVassalsが別のインタープリタープラグインを使用するように構成する方法を知りたいと思います。
現在、私は/etc/rc.localから開始され、次の設定で1つのEmperorを持っています。
[uwsgi]
uid = www-data
gid = www-data
master = true
emperor = /etc/uwsgi/vassals
daemonize = /var/log/uwsgi/emperor.log
それから私はこのようなiniファイルを備えたVassalsの束を持っています:
[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を1つだけ言ってもいいですか。
plugin = python3.4
そして別の:
plugin = python2.7
?
同じuwsgi EmperorでPython 2.7とPython 3 virtualenvを組み合わせる方法を教えてください。
plugins=python3
またはplugins=python36