`conda activate`如何更改*当前*bash环境?

2024-09-30 10:42:28 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我想通过执行shell脚本来更改当前的bash env变量,我需要执行source somecript,以便env设置命令在当前bash中运行,而不是在分叉的bash中运行

conda本身是一个python脚本,通过在命令行上运行conda activate someenv,bash本身首先被分叉。如果是这样的话,那么在执行这个命令之后,如何设置我的原始bash env变量呢

我试图深入研究康达的包裹,但在迷路之前我找不到这是怎么做到的


Tags: 命令行命令env脚本bashsourceshellconda
1条回答
网友
1楼 · 发布于 2024-09-30 10:42:28

conda itself is a python script

我不知道你从哪里读到的conda设置为bash函数,您可以自己验证。在.bashrc中,您可以看到调用文件/miniconda3/etc/profile.d/conda.sh来设置conda命令,如下所示:

conda() {
    if [ "$#" -lt 1 ]; then
        "$CONDA_EXE" $_CE_M $_CE_CONDA
    else
        \local cmd="$1"
        shift
        case "$cmd" in
            activate|deactivate)
                __conda_activate "$cmd" "$@"
                ;;
            install|update|upgrade|remove|uninstall)
                CONDA_INTERNAL_OLDPATH="${PATH}"
                __add_sys_prefix_to_path
                "$CONDA_EXE" $_CE_M $_CE_CONDA "$cmd" "$@"
                \local t1=$?
                PATH="${CONDA_INTERNAL_OLDPATH}"
                if [ $t1 = 0 ]; then
                    __conda_reactivate
                else
                    return $t1
                fi
                ;;
            *)
                CONDA_INTERNAL_OLDPATH="${PATH}"
                __add_sys_prefix_to_path
                "$CONDA_EXE" $_CE_M $_CE_CONDA "$cmd" "$@"
                \local t1=$?
                PATH="${CONDA_INTERNAL_OLDPATH}"
                return $t1
                ;;
        esac
    fi
}

并调用__add_sys_prefix_to_path函数修改路径:

__add_sys_prefix_to_path() {
    # In dev-mode CONDA_EXE is python.exe and on Windows
    # it is in a different relative location to condabin.
    if [ -n "${_CE_CONDA}" ] && [ -n "${WINDIR+x}" ]; then
        SYSP=$(\dirname "${CONDA_EXE}")
    else
        SYSP=$(\dirname "${CONDA_EXE}")
        SYSP=$(\dirname "${SYSP}")
    fi

    if [ -n "${WINDIR+x}" ]; then
        PATH="${SYSP}/bin:${PATH}"
        PATH="${SYSP}/Scripts:${PATH}"
        PATH="${SYSP}/Library/bin:${PATH}"
        PATH="${SYSP}/Library/usr/bin:${PATH}"
        PATH="${SYSP}/Library/mingw-w64/bin:${PATH}"
        PATH="${SYSP}:${PATH}"
    else
        PATH="${SYSP}/bin:${PATH}"
    fi
    \export PATH
}

因此conda不启动任何子bash shell,而只是一系列bash函数,只需就地编辑当前的env变量

相关问题 更多 >

    热门问题