Snakemake 将 conda 激活命令更改为 'conda activate'

Snakemake change conda activation command to 'conda activate'

我想在我的托管环境中使用带有fish shell和conda环境的snakemake(基本上我没有root权限,默认的shell无法更改)。

我在 .bashrc:

中使用这个技巧将 fish 设置为 'default' shell
if [ "$REALBASH" != "1" ]; then
  case "$-" in
  *i*)
    export SHELL=/usr/bin/fish
    tty > /dev/null && echo "Your ~/.bashrc is switching interactive SHELL to $SHELL"
    [ -x $SHELL ] && exec $SHELL "$@"
    echo "Apparently $SHELL is not available here. Continuing with bash."
    export SHELL=/bin/bash
  ;;
  esac
fi

还有一个命令 realbash 设置环境变量 REALBASH=1 来绕过这个 hack。

我设法让 conda 使用 与 fish 一起工作,但它的缺点是在 fish 中激活 conda 环境的命令与 bash 不同。在bash中,命令是source activate ...,在fish中是conda activate ...

激活环境在 bash 使用 source activate ... 和鱼使用 conda activate ... 都有效。

当我现在从 fish 执行 snakemake 时,出现以下错误:

Activating conda environment ...
source: Error encountered while sourcing file “activate”:
source: No such file or directory

如果我从 bash 执行 snakemake,也会出现同样的错误。

如果我通过 snakemake --overwrite-shellcmd realbash 从 bash 执行 snakemake,我会得到同样的错误并最终进入由 snakemake 打开的 bash shell。只有在键入 exit 之后,snakemake 才会完成(但当然没有成功)。 如果我通过 snakemake --overwrite-shellcmd realbash 从 fish 执行 snakemake,也会发生同样的行为。

我对 --overwrite-shellcmd 的行为感到困惑,有没有办法让我的 hack 起作用? 否则,我可以将 snakemake 配置为调用 conda activate 而不是 source activate 吗? 或者还有其他解决方案吗?

显然这是旧版本 snakemake 中的错误。问题中描述的效果是用 snakemake 4.3.1.

产生的

运行 snakemake 来自安装了 snakemake 5.17.0conda 环境,与问题中描述的设置完美配合。不需要 --overwrite-shellcmd 或其他更改。