
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 init
conda 실행 파일을 마스카라레이드하는 "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'
큰따옴표를 사용하면 작동하지 않습니다.