gpt4 book ai didi

python - `conda activate` 如何改变*当前* bash 环境?

转载 作者:行者123 更新时间:2023-12-04 15:08:51 25 4
gpt4 key购买 nike

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

conda 本身是一个 python 脚本,只需在命令行上运行 conda activate someenv,bash 本身就会首先 fork 。如果是这样,为什么在执行此命令后,设置了我原来的 bash env 变量?

我试图深入研究 conda 包,但在迷路之前无法找到它是如何完成的......

最佳答案

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函数修改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 函数,它只是就地编辑当前的环境变量

关于python - `conda activate` 如何改变*当前* bash 环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65589737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com