[英]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 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.