运行多个uwsgi python版本

2024-05-02 19:58:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图将django与uwsgi一起部署,我想我对它的工作方式缺乏了解。我让uwsgi在皇帝模式下运行,我正试图让附庸在他们自己的virtualenvs中运行,使用不同的python版本。

皇帝配置:

[uwsgi]
socket = /run/uwsgi/uwsgi.socket
pidfile = /run/uwsgi/uwsgi.pid
emperor = /etc/uwsgi.d
emperor-tyrant = true
master = true
autoload = true
log-date = true
logto = /var/log/uwsgi/uwsgi-emperor.log

还有附庸:

uid=django
gid=django
virtualenv=/home/django/sites/mysite/venv/bin
chdir=/home/django/sites/mysite/site
module=mysite.uwsgi:application
socket=/tmp/uwsgi_mysite.sock
master=True

我在皇帝日志中看到以下错误:

Traceback (most recent call last):
  File "./mysite/uwsgi.py", line 11, in <module>
    import site
ImportError: No module named site

我的站点的virtualenv创建为python 3.4pyvenv。uwsgi是系统uwsgi(python2.6)。我的印象是皇帝可以是任何python版本,因为附庸会用自己的python和环境启动,由主进程启动。我现在认为这是错误的。

我想做的是用系统python运行uwsgi主进程,但是用它们自己的python和它们自己的库运行各种附属程序(应用程序)。这可能吗?或者,如果我想经营多条Python,我就必须经营多个皇帝吗?有点违背了拥有虚拟环境的目的。


Tags: djangorun版本masterlogtruesitesocket
1条回答
网友
1楼 · 发布于 2024-05-02 19:58:55

“优雅”的方法是将uWSGI python支持构建为一个插件,并为每个python版本提供一个插件:

(来自uWSGI来源)

make PROFILE=nolang

(将在没有语言支持的情况下构建一个uWSGI二进制文件)

PYTHON=python2.7 ./uwsgi --build-plugin "plugins/python python27"

将建立可以加载到附庸中的python27_plugin.so

PYTHON=python3 ./uwsgi --build-plugin "plugins/python python3"

将为python3等构建插件。

构建uWSGI插件的方法多种多样,我所报告的插件是最安全的(它确保了#ifdef被遵守)。

尽管如此,每个python版本都有一个uWSGI皇帝也是可行的。记住皇帝是可堆叠的,所以你可以让一个通用的皇帝为每一个python版本生成一个皇帝(作为它的附庸)。

相关问题 更多 >