在当前终端窗口中执行'conda init'命令,而无需关闭当前终端窗口。

4

我正在尝试使用conda来处理一些用例。主要的问题是,conda init在同一个bash shell脚本中的流程中无法正常工作,这让我很头疼。我经常看到以下错误:

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.

即使已经执行了conda初始化脚本和conda init的内容,也会出现这种情况。结果是不一致的:有时候初始化逻辑可以正常工作,有时候则不行。我还没有确定它需要什么魔法才能正常工作。

conda_init() {
    # __conda_setup="$('$CONDA_DIR/bin/conda' 'shell.bash' 'hook' 2> /dev/null)";
    source $CONDA_DIR/etc/profile.d/conda.sh
    export PATH="$CONDA_DIR/condabin:$CONDA_DIR/bin:$PATH";
    export CONDARC=$CONDA_DIR ;
    conda init bash
}
conda_init
conda activate py38

这给了我们

 
/Users/steve/opt/miniconda3/bin/conda
/Users/steve/opt/miniconda3/bin::/Users/steve/opt/miniconda3/condabin:<other stuff..>

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'.

如何使 conda_init() 能够可靠地运行 conda init 在同一 shell 中?


1
在这个例子中,conda activate 在哪里被调用了?另外,一个懒惰的选项是使用初始化文件:conda init bash && source ~/.bashrc - merv
@merv 修复了剪切和粘贴错误:现在显示了 conda activate。该脚本旨在用于可能在任何地方运行的 Python 脚本中。重点是与更新用户主目录分离。 - WestCoastProjects
也许您会从一个合适的独立可执行文件中获益,例如micromamba,它包含激活功能而不会触及用户的资源文件。目前,OP方法对我来说似乎有点不正规,可能是XY问题。请考虑在问题描述中描述最终想要实现的生产阶段愿景。 - merv
@merv 我真的对这些Python环境出现意外行为感到非常疲惫。已经持续数天了。我现在安装了micromamba,然后运行了micromamba install python=3.8 py38_mamba,但是出现了error libmamba No target prefix specified的错误信息。我在谷歌上找不到任何相关结果。我想我可以再提一个问题来解决这个问题。 - WestCoastProjects
“Micromamba” 的文档不足以让我成功搭建环境。 - WestCoastProjects
@merv 这是另一个问题 https://stackoverflow.com/questions/72147626/error-libmamba-no-target-prefix-specified-when-creating-a-micromamba-environme - WestCoastProjects
1个回答

5
通常情况下,编程工作中不需要“激活”环境。这就是 conda run 的用途...
conda run -n py38 python my_script.py

否则,如果已定义CONDA_DIR,则以下内容将在活动的bash会话中运行初始化shell命令:
eval "$(${CONDA_DIR}/bin/conda shell.bash hook 2> /dev/null)"

好的,我之前不知道有 conda run 这个命令。我会尝试使用它。 - WestCoastProjects

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接