Eu gostaria de executar um script python local remotamente, mas primeiro ative o ambiente adequado na máquina remota. Por exemplo, se estiver executando localmente, eu faria:
source activate myenv
python myscript.py
Eu pensei que poderia fazer isso usando ssh assim:
ssh user@host "source activate myenv && python" < ./myscript.py
No entanto, isso não parece funcionar. Ele produz a mensagem de erro:
bash: activate: No such file or directory
Qual é a melhor maneira de fazer algo assim?
Você não precisa ativar o ambiente virtual se quiser apenas executar um script e sair. A ativação de um ambiente virtual é apenas uma maneira prática de substituir o executável python ajustando o
PATH
1 . Assim, o comandopode ser efetivamente substituído por
Portanto, ao executar o script via
ssh
, basta selecionar o caminho correto para omyenv
executável s python e pronto:1 Fora isso, a variável de ambiente
VIRTUAL_ENV
é definida e o nome do ambiente é anexado aPS1
.Eu tive um problema semelhante recentemente (julho de 2022). Eu estava tentando fazer alguma manutenção em um servidor de produção remoto rodando Django.
Eu poderia fazer isso manualmente, mas tive dificuldade em fazê-lo por meio de um script.
eu tentei
que cuidava de encontrar o python e manage.py apropriados, mas não tinha a localização do ambiente virtual no Path (o que era necessário para os pacotes instalados ).
A solução que finalmente funcionou para mim é
Alguns pontos a serem observados:
Se você pode executar
source activate myenv
no shell, activate deve ser um arquivo no formato$PATH
. encontre esse arquivo e especifique um caminho completo. Ele deve estar presente no computador remoto. Ou descubra o que esse script de ativação faz e apenas envie atribuições para o computador remoto.