Azureに仮想マシンがあり、sshを実行した後、Condaを実行してpython alright:
conda activate py36
python some_script.py
これらのコマンドをマシンからSSH経由で実行するには、Condaへのフルパスを指定する必要があります。
ssh ${USER}@${IP} "/data/anaconda/envs/py35/bin/conda activate py36; python some_script.py"
しかし、私はこのエラーを受け取ります:
CommandNotFoundError: Your Shell has not been properly configured to use 'conda activate'.
To initialize your Shell, run
$ conda init <Shell_NAME>
Currently supported shells are:
- bash
- fish
- tcsh
- xonsh
- zsh
- powershell
See 'conda init --help' for more information and options.
IMPORTANT: You may need to close and restart your Shell after running 'conda init'.
それでも、実行中のシェルはbash
です。
$ sshb ${USER}@${IP} echo $Shell
/bin/bash
SSHを介してリモートでconda環境をアクティブ化するにはどうすればよいですか?
Edit:これを処理する過程で、conda init
がconda実行可能ファイルをマスカレードする「conda」という関数を作成することがわかりました。 type conda
を参照してください。これにより、現在のシェルで環境変数を設定できます。これは問題の原因となるため重要です。
Sshを介してコマンドを実行すると、このconda
bash関数を設定する〜/ .bashrcは実行されません。
だから私があなたのために持っている最終的な答えは
ssh ${USER}@${IP} ". ~/.bashrc ; conda activate py36; python some_script.py"
. ~/.bashrc
は、以前にconda init
を実行したことがある場合は、conda関数を提供する〜/ .bashrcを単純にソースします。
古い答え
アクティベーションとpythonコード)を使用してシェルスクリプトを作成することをお勧めします
# job.sh
conda activate py36
python some_script.py
chmod +x job.sh
で実行可能にする
次に、次のコマンドを使用してリモートで実行します。
ssh ${USER}@${IP} bash -l "<relative path to script on remote machine>"
bash -l
をログインシェルにして、.bash_profile
または.bashrc
を使用できるようにします。これは、完全なパスを指定する必要がないことを意味します。
絶対に1つのコマンドが必要な場合は、 heredoc を使用します。
ssh ${USER}@${IP} bash -l <<HERE
conda activate py36
python some_script.py
HERE
他の方法も試しましたが、bashがコマンドの分離全体で環境の変化を保存する方法に問題があるようです。 Conda activateは、さまざまな環境変数を設定します(CONDAとPATH変数が前に付いています)。
これからつなぎ合わせて issue これらの行を.bashrc
に追加することで、問題を解決することができました。
export -f conda
export -f __conda_activate
export -f __conda_reactivate
export -f __conda_hashr
export -f __add_sys_prefix_to_path
eval "$(conda Shell.bash hook)"
export
sがeval
ソリューションでまだ必要かどうかはわかりませんが、何も壊さなかったので、そのままにしておきました。
編集:覚えておくことが重要です。何らかの方法でconda
を使用するスクリプトは、bash
およびnotで実行する必要があります。 -)sh
。