環境でリモートでローカル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

したがって、次のようにスクリプトを実行するときは、sshPython実行可能ファイルの正しいパスを選択してください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は正しい仮想環境を有効にします。
  • 同じシェルインスタンスに両方のコマンドを含めます(同じ文字列に入れてセミコロンで区切ります。)、2つのコマンド間のコンテキストを維持することが重要です。

答え3

source activate myenvシェルで実行できる場合は、有効にする必要があります$PATH。ファイルを見つけてフルパスを指定します。リモートコンピュータに存在する必要があります。または、このアクティベーションスクリプトの機能を調べて、そのタスクをリモートシステムに送信します。

関連情報