I recently installed anaconda2 on my Mac. By default Conda is configured to activate the base environment when I open a fresh terminal session.
I want access to the Conda commands (i.e. I want the path to Conda added to my $PATH which Conda does when initialised so that's fine).
However I don't ordinarily program in python, and I don't want Conda to activate the base environment by default.
When first executing conda init from the prompt, Conda adds the following to my .bash_profile:
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/geoff/anaconda2/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then eval "$__conda_setup"
else
if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
else export PATH="/Users/geoff/anaconda2/bin:$PATH"
fi
# fi
unset __conda_setup
# <<< conda initialize <<<If I comment out the whole block, then I can't activate any Conda environments.
I tried to comment out the whole block except for
export PATH="/Users/geoff/anaconda2/bin:$PATH"But then when I started a new session and tried to activate an environment, I got this error message:
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.This question (and others like it) are helpful, but doesn't ultimately answer my question and is more suited for linux users.
To be clear, I'm not asking to remove the (base) from my $PS1 I'm asking for Conda not to activate base when I open a terminal session.
8 Answers
I have conda 4.6 with a similar block of code that was added by conda. In my case, there's a conda configuration setting to disable the automatic base activation:
conda config --set auto_activate_base falseThe first time you run it, it'll create a .condarc in your home directory with that setting to override the default.
This wouldn't de-clutter your .bash_profile but it's a cleaner solution without manual editing that section that conda manages.
There're 3 ways to achieve this after conda 4.6. (The last method has the highest priority.)
Use sub-command
conda configto change the setting.conda config --set auto_activate_base falseIn fact, the former
conda configsub-command is changing configuration file.condarc. We can modify.condarcdirectly. Add following content into.condarcunder your home directory,# auto_activate_base (bool) # Automatically activate the base environment during shell # initialization. for `conda init` auto_activate_base: falseSet environment variable
CONDA_AUTO_ACTIVATE_BASEin the shell's init file. (.bashrcfor bash,.zshrcfor zsh)export CONDA_AUTO_ACTIVATE_BASE=falseTo convert from the
condarcfile-based configuration parameter name to the environment variable parameter name, make the name all uppercase and prependCONDA_. For example, conda’salways_yesconfiguration parameter can be specified using aCONDA_ALWAYS_YESenvironment variable.The environment settings take precedence over corresponding settings in
.condarcfile.
References
- The Conda Configuration Engine for Power Users
- Using the .condarc conda configuration file
conda config --describe- Conda 4.6 Release
The answer depends a little bit on the version of conda that you have installed. For versions of conda >= 4.4, it should be enough to deactivate the conda environment after the initialization, so add
conda deactivateright underneath
# <<< conda initialize <<< 10 To disable auto activation of conda base environment in terminal:
conda config --set auto_activate_base falseTo activate conda base environment:
conda activate 3 So in the end I found that if I commented out the Conda initialisation block like so:
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
# __conda_setup="$('/Users/geoff/anaconda2/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
# if [ $? -eq 0 ]; then # eval "$__conda_setup"
# else
if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
else export PATH="/Users/geoff/anaconda2/bin:$PATH"
fi
# fi
# unset __conda_setup
# <<< conda initialize <<<It works exactly how I want. That is, Conda is available to activate an environment if I want, but doesn't activate by default.
7If you manage your .bashrc manually and like to keep it simple, all you really need is:
. "$HOME/anaconda2/etc/profile.d/conda.sh"See Recommended change to enable conda in your shell.
This will make the conda command available without activating the base environment (nor reading your conda config).
Note that this is (of course) not compatible with managing the conda installation with conda init, but other than that, nothing bad is coming from it. You may even experience a significant speedup compared to the conda init generated code, because this solution avoids calling conda to parse your config files on whether to enable the base environment, etc.
It's best to also keep the if/fi lines to avoid error messages if using the same bashrc on several systems where conda may not be installed:
if [ -f "$HOME/anaconda2/etc/profile.d/conda.sh" ]; then . "$HOME/anaconda2/etc/profile.d/conda.sh"
fiFinally, if you share your bashrc between several systems where conda may be installed in different paths, you could do as follows:
for CONDA_PREFIX in \ "$HOME/anaconda2" \ "$HOME/miniconda3" \ "/opt/miniconda3" \
do if [ -f "$CONDA_PREFIX/etc/profile.d/conda.sh" ]; then . "$CONDA_PREFIX/etc/profile.d/conda.sh" break fi
doneOf course, this is now similar in length compared to the conda init generated code, but will still execute much faster, and will likely work better than conda init for users who synchronize their .bashrc between different systems.
for conda 4.12.0 (under WOS) the following worked (where all the previous answers -these included- didn't do the trick):
in your activate.bat file (mine was at ~/miniconda3/Scripts/activate.bat), change the line:
@REM This may work if there are spaces in anything in %*
@CALL "%~dp0..\condabin\conda.bat" activate %*into
@REM This may work if there are spaces in anything in %*
@CALL "%~dp0..\condabin\conda.bat" deactivatethis line chage/modification doesn't work in the section (of the activate.bat file):
@if "%_args1_first%"=="+" if NOT "%_args1_last%"=="+" ( @CALL "%~dp0..\condabin\conda.bat" activate @GOTO :End
)maybe because it depends on how your miniconda3 (Anaconda Prompt) executable is set up: %windir%\System32\cmd.exe "/K" some-path-to\miniconda3\Scripts\activate.bat some-path-to\miniconda3 (in my case).
caveat: updating conda overwrites this (activate.bat) file; so one has to modify the above line as many times as needed/updated. not much of a deal-breaker if you ask me.
This might be a bug of the recent anaconda. What works for me:
step1: vim /anaconda/bin/activate, it shows:
#!/bin/sh _CONDA_ROOT="/anaconda" # Copyright (C) 2012 Anaconda, Inc # SPDX-License-Identifier: BSD-3-Clause \. "$_CONDA_ROOT/etc/profile.d/conda.sh" || return $? conda activate "$@"step2: comment out the last line: # conda activate "$@"