SSH를 통해 conda 환경 활성화

SSH를 통해 conda 환경 활성화

Azure에는 ssh'ing 후 Conda와 Python을 실행할 수 있는 가상 머신이 있습니다.

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 환경을 활성화하려면 어떻게 해야 합니까?

답변1

편집하다: 이 문제를 해결하는 과정에서 나는 conda initconda 실행 파일을 마스카라레이드하는 "conda"라는 함수를 생성한다는 것을 발견했습니다. 보다 type conda. 현재 쉘에서 환경 변수를 설정할 수 있습니다. 이는 문제의 원인이 되기 때문에 중요합니다.

ssh를 통해 명령을 실행하면 이 bash 기능을 설정하는 ~/.bashrc가 실행되지 않습니다 conda.

그래서 내가 당신에게 드리는 마지막 대답은 다음과 같습니다.

ssh ${USER}@${IP} ". ~/.bashrc ; conda activate py36; python some_script.py"

. ~/.bashrc이전에 이미 실행한 경우 conda 기능을 제공하는 ~/.bashrc를 소싱하기만 하면 됩니다 conda init.

오래된 답변

활성화 및 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전체 경로를 제공할 필요가 없음을 의미 하는 로그인 셸로 만듭니다 .

단일 명령이 절대적으로 필요한 경우heredoc.

ssh ${USER}@${IP} bash -l <<HERE
conda activate py36
python some_script.py
HERE

다른 방법도 시도했지만 bash가 명령 분리 전반에 걸쳐 환경 변경 사항을 보존하는 방식에 몇 가지 문제가 있는 것 같습니다. Conda activate는 다양한 환경 변수(CONDA 및 PATH 변수가 앞에 붙음)를 설정합니다.

답변2

"conda" 경로를 지정하는 대신 다음과 같이 "활성화" 경로를 지정하는 것이 효과적입니다.

ssh [host] "source ~/anaconda3/bin/activate [name of conda env] ; cd [pick a dir] ; [command]"

[command]의 경우 "conda env list"를 사용하여 활성화된 환경을 확인하세요. 아니면 "python foo.py"를 사용할 수도 있습니다.

"~/anaconda3/bin/activate" 경로를 조정해야 할 수도 있습니다.

답변3

이것저것 모아서문제내 항목에 다음 줄을 추가하여 문제를 해결했습니다 .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.~ 아니다 sh.

답변4

@Maeve Kennedy의 답변에 추가되었습니다. 큰따옴표를 사용하는 대신 아래와 같이 작은따옴표를 사용하는 것이 좋습니다.

ssh ${USER}@${IP} '. ~/.bashrc ; conda activate py36; python some_script.py'

Conda 환경을 원격으로 활성화한 후 bash 명령을 실행할 수 있습니다. 아래와 같은 것;

ssh ${USER}@${IP} '. ~/.bashrc ; conda activate py36; echo $CONDA_PATH'

큰따옴표를 사용하면 작동하지 않습니다.

관련 정보