我在 Azure 上有一个虚拟机,在 ssh 之后我可以运行 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'.
然而,运行的 shell 是bash
:
$ sshb ${USER}@${IP} echo $SHELL
/bin/bash
如何通过 SSH 远程激活 conda 环境?
编辑:在解决这个问题的过程中,我发现
conda init
创建了一个名为“conda”的函数,该函数伪装了 conda 可执行文件。看type conda
。这允许它在当前 shell 中设置环境变量。这很重要,因为它会导致问题。当您通过 ssh 运行命令时,它不会运行设置此
conda
bash 函数的 ~/.bashrc。所以我给你的最后答案是
. ~/.bashrc
如果您之前已经运行过,只需获取提供 conda 功能的 ~/.bashrc 即可conda init
。旧答案
我建议你用激活和 python 代码制作一个 shell 脚本
使可运行
chmod +x job.sh
然后使用以下命令远程运行:
bash -l
使它成为一个登录外壳,它还允许您使用您的.bash_profile
or.bashrc
,这意味着您不需要提供完整路径。如果您绝对需要单个命令,请使用heredoc。
我也尝试了其他方法,但 bash 跨命令分离保留环境变化的方式似乎存在一些问题。Conda 激活设置各种环境变量(以 CONDA 和 PATH 变量为前缀)。
它不是指定“conda”的路径,而是像这样指定“激活”的路径:
对于 [command] 尝试“conda env list”以查看激活了哪个环境。或者你可以做“python foo.py”。
您可能需要调整路径“~/anaconda3/bin/activate”。
从这个问题拼凑起来,我设法通过将这些行添加到我的来解决问题
.bashrc
:我不确定解决方案
export
是否仍然需要 s,eval
但它们没有破坏任何东西,所以我只是保留了它们。编辑:同样重要的是要记住,任何
conda
以某种方式使用的脚本都需要使用bash
而不是sh
运行。只是@Maeve Kennedy 回答的补充。不要使用双引号,最好使用如下所示的单引号
它允许您在远程激活 conda 环境后执行任何 bash 命令。像下面这样的东西;
用双引号是行不通的。