运行 虚拟环境中的 python 脚本 node.js pm2
Running a python script in virtual environment with node.js pm2
我想引用 因为我确定有人会把它标记为重复。
我不是在寻找对 supervisord 的其他参考。我确信它很棒,但是节点 PM2 具有我需要的功能,并且更易于实现和测试。
手动启动
在原型制作过程中,我创建了一个名为 'p3env' 的虚拟环境。在每个脚本的顶部,我放置了一个 bash 指令:
#!./py3env/bin/python
这允许我使用这个特定的 python 环境执行目录中的每个脚本,而无需激活它。它非常方便有用,python 脚本在我手动启动时运行良好。
当我说'start it by hand'时,我应该清楚我的意思。我的脚本名为 'strain_to_db.py'。当我手动启动它时,我在 shell via ssh:
./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 时工作正常。当我尝试使用 'command line argument' 样式将其传递给 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
,它会自动使用你激活的环境。
我想引用
我不是在寻找对 supervisord 的其他参考。我确信它很棒,但是节点 PM2 具有我需要的功能,并且更易于实现和测试。
手动启动
在原型制作过程中,我创建了一个名为 'p3env' 的虚拟环境。在每个脚本的顶部,我放置了一个 bash 指令:
#!./py3env/bin/python
这允许我使用这个特定的 python 环境执行目录中的每个脚本,而无需激活它。它非常方便有用,python 脚本在我手动启动时运行良好。
当我说'start it by hand'时,我应该清楚我的意思。我的脚本名为 'strain_to_db.py'。当我手动启动它时,我在 shell via ssh:
./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 时工作正常。当我尝试使用 'command line argument' 样式将其传递给 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
,它会自动使用你激活的环境。