Eu tenho uma máquina virtual no Azure onde, após o ssh'ing, posso executar o Conda e o python:
conda activate py36
python some_script.py
Para executar esses comandos da minha máquina através do SSH, preciso fornecer o caminho completo para o Conda:
ssh ${USER}@${IP} "/data/anaconda/envs/py35/bin/conda activate py36; python some_script.py"
mas recebo este erro:
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'.
No entanto, o shell em execução é bash
:
$ sshb ${USER}@${IP} echo $SHELL
/bin/bash
Como posso ativar um ambiente conda remotamente por meio do SSH?
Edit : No processo de trabalhar isso, descobri que
conda init
cria uma função chamada "conda" que mascara os executáveis do conda. Vejatype conda
. O que permite definir variáveis de ambiente no shell atual. Isso é importante porque contribui para o problema.Quando você executa um comando via ssh, ele não executa ~/.bashrc, que é o que configura essa
conda
função bash.Portanto, a resposta final que tenho para você é
. ~/.bashrc
simplesmente origina o ~/.bashrc que fornece a função conda se você já executouconda init
antes.Resposta antiga
Eu sugiro que você faça um script de shell com a ativação e o código python
Tornar executável com
chmod +x job.sh
Em seguida, execute remotamente com o seguinte comando:
bash -l
o torna um shell de login que também permite que você use seu.bash_profile
ou , o.bashrc
que significa que você não precisará fornecer o caminho completo.Se você precisar absolutamente de um único comando, use um heredoc .
Eu tentei outras maneiras também, mas parece que há algum problema com a maneira como o bash preserva as mudanças ambientais na separação de comandos. Conda activate define várias variáveis de ambiente (prefixadas com CONDA e a variável PATH).
Em vez de especificar o caminho para "conda", funciona para mim especificar o caminho para "ativar" assim:
Para [comando], tente "conda env list" para ver qual ambiente está ativado. Ou você pode fazer "python foo.py".
Você pode ter que ajustar o caminho "~/anaconda3/bin/activate".
Reunidos a partir deste problema , consegui resolver o problema adicionando estas linhas ao meu
.bashrc
:Não tenho certeza se os
export
s ainda são necessários com aeval
solução, mas eles não quebraram nada, então apenas os guardei.EDIT: também importante ter em mente, qualquer script usando
conda
de alguma forma precisa ser executadobash
e nãosh
.Apenas uma adição à resposta de @Maeve Kennedy. Em vez de usar aspas duplas, é melhor usar aspas simples como abaixo
Ele permite que você execute qualquer comando bash após ativar o ambiente conda remotamente. Algo como abaixo;
com aspas duplas não funciona.