ローカル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
単にスクリプトを実行して終了したい場合は、仮想環境を有効にする必要はありません。仮想環境を有効にすることは、PATH
1を調整してPython実行可能ファイルを置き換える便利な方法です。だからコマンドは
$ source path/to/myenv/bin/activate
$ python myscript.py
$ deactivate
で効果的に置き換えることができます。
$ path/to/myenv/bin/python myscript.py
したがって、次のようにスクリプトを実行するときは、ssh
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は正しい仮想環境を有効にします。
- 同じシェルインスタンスに両方のコマンドを含めます(同じ文字列に入れてセミコロンで区切ります。)、2つのコマンド間のコンテキストを維持することが重要です。
答え3
source activate myenv
シェルで実行できる場合は、有効にする必要があります$PATH
。ファイルを見つけてフルパスを指定します。リモートコンピュータに存在する必要があります。または、このアクティベーションスクリプトの機能を調べて、そのタスクをリモートシステムに送信します。