应该在systemd服务单元配置中设置PATH和VIRTUAL_ENV环境变量,以使gunicorn服务于Flask应用程序吗?

问题描述 投票:0回答:1

[当为带有Flancorn的Flask应用程序提供服务时,我假设我应该在gunicorn myapp:app之前激活venv,因为Gunicorn连同该应用程序的其他软件包和代码一起安装在venv中。在使用flask runpython myapp.py来运行应用程序的情况下,首先需要激活venv(在我阅读的所有教程和书中),因此在我看来,没有理由认为枪杀案的情况有所不同。

然后,当将gunicorn设为系统服务单元时,正如我在这种情况下所知,没有办法像在交互式shell中那样“激活venv”,我能想到的最接近的方法是将Environment="PATH=/PathToMyApp:other_default_path_var_contents"Environment="VIRTUAL_ENV=/PathToMyApp/.venv"在配置中,连同ExecStart=/PathToMyApp/.venv/bin/gunicorn myapp:app

但是,我发现我读过的几乎所有教程都没有按照我的想法添加这些环境选项。那些教程是否只是对此有误,还是环境变量对于虚拟环境中的炮弹来说微不足道?如果是后者,那是为什么呢?与flask runpython myapp.py案件有什么区别?

python flask virtualenv gunicorn systemd
1个回答
0
投票

[查看官方的gunicorn文档,systemd的部分说明您应该定义:

systemd

这应该足够,不必设置WorkingDirectory=/PathToMyApp ExecStart=/PathToMyApp/.venv/bin/gunicorn myapp:app PATH环境变量。

那些教程是否只是对此有误,或者对于虚拟环境中的金枪鱼而言,环境变量无关紧要?如果是后者,那是为什么呢?与flask run和python myapp.py案例有什么区别?

当您在外壳程序上激活了虚拟环境的情况下运行VIRTUAL_ENV时,它实际上正在运行虚拟环境python myapp.py目录中的python解释器。您可以如下所示:

这将显示您的系统Python:

bin

激活静脉:

/tmp $ which python
/usr/local/bin/python

这将显示venv中的python解释器:

/tmp $ . venv/bin/activate

此外,当您(venv) /tmp $ which python /tmp/venv/bin/python 时,爆炸行指向该venv中的python解释器:

cat venv/bin/gunicorn

因此,当您在#!/tmp/venv/bin/python3 单位文件中将其指定为systemd时(或在未激活venv的情况下直接执行ExecStart时),它实际上是在venv/bin/gunicorn上运行的,这反过来会使该venv中安装了所有依赖项可用于该过程。

© www.soinside.com 2019 - 2024. All rights reserved.