繁体   English   中英

使用 node.js pm2 在虚拟环境中运行 python 脚本

[英]Running a python script in virtual environment with node.js pm2

我想引用这个问题,因为我确信有人会将其标记为重复。

我不是在寻找对supervisord的另一个参考。 我确信它很棒,但是节点 PM2 具有我需要的功能,并且更易于实现和测试。

手动启动

在原型设计期间,我创建了一个名为“p3env”的虚拟环境。 在每个脚本的顶部,我放置了一个 bash 指令:

#!./py3env/bin/python

这允许我使用这个特定的 python 环境执行目录中的每个脚本,而无需激活它。 它非常方便和有用,当我手动启动它时,python 脚本运行良好。

当我说“手动启动”时,我应该清楚我的意思。 我的脚本称为“strain_to_db.py”。 当我手动启动它时,我通过 ssh 在 shell 上:

./strain_to_db.py

这使我需要工作的一切正常工作。

PM2 启动

从相对路径到绝对路径

为了让 pm2 工作,我开始:

pm2 start ./strain_to_db.py

指定解释器

显然 pm2 忽略了 python 脚本顶部的指令并尝试使用全局“python”执行。 没问题,我可以指定解释器:

pm2 start ./strain_to_db.py --interpreter /home/ubuntu/db_if/p3env/bin/python

没有骰子。 同样,也许尝试更多的绝对路径:

pm2 start /home/ubuntu/db_if/strain_to_db.py --interpreter /home/ubuntu/db_if/p3env/bin/python

作为命令行选项运行脚本

现在我越来越沮丧。 我尝试另一种策略。 我尝试使用以下命令在命令行中运行 python 可执行文件:

/home/ubuntu/db_if/p3env/bin/python /home/ubuntu/db_if/strain_to_db.py

当不涉及 pm2 时,这可以正常工作。 当我尝试使用“命令行参数”样式将其传递给 pm2 时:

pm2 start /home/ubuntu/db_if/p3env/bin/python -- /home/ubuntu/db_if/strain_to_db.py

挫折

同样的错误。 错误总是'can't import pymysql',只安装在虚拟环境中。

我不知道还能去哪里。 我有几个要添加到 pm2 执行监视器的脚本,但我似乎无法让其中一个脚本正确启动和运行。

在环顾四周后,我在电子邮件顶部引用的问题在其中一个答案中有线索,但不是答案。

当文件以“.py”结尾时,pm2 调用“python”......无论如何。 我相信 pm2 中有一个配置文件,您可以修改它来改变这种行为。 我只是从脚本中删除了“.py”并指定了解释器:

pm2 start ./strain_to_db --interpreter ./py3env/bin/python

完美运行。 当我使用 pm2 创建启动脚本时,我将使用绝对路径。 感谢任何正在寻找的人,我希望这对未来的人有所帮助。

这篇 Medium 文章为我解决了这个问题。

https://medium.com/@gokhang1327/deploying-flask-app-with-pm2-on-ubuntu-server-18-04-992dfd808079

在虚拟环境中运行 python 脚本的命令:

pm2 start app.py --name flask-app --interpreter=python3

--name 可选,即在 pm2 状态中显示的进程名称

结果:

在此处输入图像描述

“new”是我的 virtualenv 环境的名称。

这个问题有点晚了,但对于任何带着一双新眼睛来到这里的人来说,我发现如果你激活虚拟环境,例如。 source venv/Scripts/activate然后通过 pm2 启动您的脚本,例如。 pm2 start main.py --name migration ,它会自动使用你激活的环境。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM