在环境中远程运行本地 python 脚本

在环境中远程运行本地 python 脚本

我想远程运行本地 python 脚本,但首先激活远程计算机中的正确环境。例如,如果在本地运行我会这样做:

source activate myenv
python myscript.py

我想我可以使用 ssh 来做到这一点,如下所示:

ssh user@host "source activate myenv && python" < ./myscript.py

然而,这似乎不起作用。它产生错误消息:

bash: activate: No such file or directory

做这样的事情最好的方法是什么?

答案1

如果您只想执行脚本并退出,则无需激活虚拟环境。激活虚拟环境只是通过调整PATH1来替换 python 可执行文件的便捷方法。所以,命令

$ source path/to/myenv/bin/activate
$ python myscript.py
$ deactivate

可以有效地替换为

$ path/to/myenv/bin/python myscript.py

因此,当通过 运行脚本时ssh,只需选择 s python 可执行文件的正确路径myenv即可:

$ ssh user@host "path/to/myenv/bin/python" < ./myscript.py

1除此之外,VIRTUAL_ENV设置环境变量并将环境名称添加到PS1.

答案2

我最近(2022 年 7 月)遇到了类似的问题。我试图在运行 Django 的远程生产服务器上进行一些维护。

我可以手动执行此操作,但通过脚本执行此操作很困难。

ssh user@host
cd DjangoFolder
pipenv shell
python manage.py migrate

我试过

ssh user@host "/pathTo/python3 /separatePathTo/manage.py migrate"

它负责查找适当的 python 和 manage.py,但路径中没有虚拟环境位置(已安装的软件包需要它)。

最终对我有用的解决方案是

ssh user@host "cd DjangoFolder; pipenv run python manage.py migrate;"

有几点需要注意:

  • “pipenv run”正在我使用“pipenv shell”创建的适当虚拟环境中运行我的命令
  • “cd DjangoFolder”正在进入适当的文件夹,以便pipenv激活正确的虚拟环境
  • 在同一个 shell 实例中包含这两个命令 (将它们放在同一个字符串中,并用分号分隔),保留两个命令之间的上下文非常重要。

答案3

如果可以source activate myenv在shell中执行,那么activate一定是$PATH.找到该文件并指定完整路径。它必须存在于远程计算机上。或者了解此激活脚本的作用,然后将作业发送到远程计算机。

相关内容