Why Conda cannot call correct Python version after activating the environment?
Asked Answered
A

10

63

I have the following conda environment under Linux:

$ conda info -e
# conda environments:
#
py33                     /u21/coyotito/.anaconda/envs/py33
root                  *  /u21/coyotito/.anaconda

And py33 is created with this command:

$ conda create -n py33 python=3.3 anaconda

The problem is when I activate py33 it still cannot call Python version 3.3.

[coyotito@pearl ~]$ source activate py33
(coyotito)[coyotito@pearl ~]$ python --version
Python 2.7.10 :: Anaconda 2.1.0 (64-bit)
(coyotito)[coyotito@pearl ~]$ conda info -e
# conda environments:
#
py33                     /u21/coyotito/.anaconda/envs/py33
root                  *  /u21/coyotito/.anaconda

Namely it still calling old python. Notice also that the prompt under bracket is not (py33).

(coyotito)[coyotito@pearl ~]$ which python
~/.anaconda/bin/python

Instead of python in new environment:

~/.anaconda/envs/py33/bin/python3.3

How can I resolve this issue?

Update

My PATH environment in ~/.bash_profile looks like this:

export PATH=$HOME/.anaconda/bin:$PATH
Andriette answered 20/4, 2016 at 3:15 Comment(4)
This is strange. If you get an error when typing source deactivate may be a sign that you have two concurrent versions of anaconda one in an environment? Maybe this is what is creating problems?Watchman
When you are in your root conda environment what does which activate return?Rittenhouse
@Paul: $HOME/bin/activateAndriette
Same happens to me when I create an environment for 2.7, when I use a more modern python 3.4 anaconda : / I need 2.7 for an online course, which still didn't update their material.Portsalut
E
85

I had the exact same problem. Not sure what I did to get into that mess, but I solved it with a simple:

conda deactivate
conda activate foo_env

(If you have activated multiple environments, you may need to run conda deactivate multiple times, including deactivating the "base" environment.)

Evzone answered 7/8, 2019 at 18:41 Comment(8)
I can confirm, but do you know why exactly do we need to deactivate ?Short
In my case, the problem happened after installing new packages. conda was "forgetting" it was using a different python version.Presentationism
Just make sure you exit the default 'base' environment too.Dhiren
what @JerryAjay said saved me, conda will load 'base' environment by default when terminal initializes. Screwed up my whole path.Granoff
O oh... this is not the first time I'm here. This does solve it and I don't understand what causes it. So that I don't come back another time I added to my .zshrc: function condaenv() { conda deactivate; conda activate $1;} and use condaenv <MY_ENV>Passably
@JerryAjay That was it for meLeong
You are my sweetheart @Tahlor. I was struggling for 6-8 hours. Your simple hack resolved my issue.Aronow
For me it showed (base) at the beginning of the shell line. With this solution it was removed and I was able to activate my specific one.Germen
M
52

TLDR;

# deactivate Conda environment
# (until even base environment is deactivated)
conda deactivate
# activate your environment
conda activate your_env_name_goes_here

try this

Activate an environment A and then check the location of Python package by using the command below.

python -c "import sys; print(sys.executable)"

or as suggested in the comments

which python

Activate another environment, let's say environment B and rerun the above python command. If conda isn't using the correct Python version then most likely running the above command will print the same path in both environments.

My conda installation wasn't using the correct version because I had activated my environment on top of the conda base environment.

Deactivating the base environment and then activating the environment I wanted, worked.

Conda calls this nested activation and you could read more about it in the docs.

If you wanted to Disable Nested Activation

conda config --set auto_stack 0

If you wanted to Disable Base Env Activation

conda config --set auto_activate_base false
Martynne answered 12/2, 2020 at 3:17 Comment(6)
This really helped. I first deactivated my current env, then deactivated base env, and then reactivated my env. Worked.Mcdaniel
Yes, deactivating all the environments did the trick for me.Variety
This worked for me, I did not notice I was activating from the base environment until running across this answer. All good now.Zach
This worked for me, thanks! still, this is strange, I don't get the same behavior on fedora. If I activate the env on top of the base env, it changes as it should.Excursive
this worked for me as well. is there to change the default setting such that the base environment is not activated to start with?No
Another way (on Unix) to check which python you're using: which python. Also useful for pip problems.Cutlery
V
11

Landed here with this same issue, but by moving out of the anaconda executable directory, the correct python was called. I was in a directory that contained the python executable that was installed with Anaconda2.

Example:

(py35) C:\Anaconda>python --version
Python 2.7.11 :: Anaconda 4.0.0 (64-bit)

(py35) C:\Anaconda>cd ..

(py35) C:\>python --version
Python 3.5.2 :: Anaconda 4.2.0 (64-bit)

(py35) C:\>
Viburnum answered 11/12, 2016 at 4:36 Comment(2)
thank god finally I got to know this after wasting hours, everything was correct once I moved to another directory: )Undemonstrative
Besides the documented security reason, this example is another justification for not keeping "." in your PATH environment, if you are using any of *NIX based operating systems.Interlard
P
6

This only happens when you create an environment without specifying any additional packages. I am using Conda 4.10.3

Refer https://github.com/conda/conda/issues/9392#issuecomment-696897058

The following comment from the above link worked in my case:

I noticed that it works if i install a packet when i create the environment.

antony@antony-fedora : ~/Workspace/tmp : which python /usr/bin/python
antony@antony-fedora : ~/Workspace/tmp : conda create --name my_env 
antony@antony-fedora : ~/Workspace/tmp : conda activate my_env 
(my_env) antony@antony-fedora : ~/Workspace/tmp : which python
/usr/bin/python 
(my_env) antony@antony-fedora : ~/Workspace/tmp : conda create --name my_env pip  
(my_env) antony@antony-fedora : ~/Workspace/tmp : conda activate my_env 
(my_env) antony@antony-fedora : ~/Workspace/tmp : which python ~/anaconda3/envs/my_env/bin/python

Also, recommend adding conda deactivate to the end of your .zshenv or .bash_profile

Pictograph answered 10/2, 2022 at 23:5 Comment(0)
R
5

So in my situation, a intern before me append anaconda path to path variable in /etc/profile, which override my conda setting in ~/.bashrc, simply removing those line in /etc/profile can help.

Rant answered 28/1, 2021 at 14:8 Comment(1)
I was my own intern, this was messed up on the back of me trying to fix pyenv. Thanks for the tip.Erechtheum
S
3

I had the same issue and solved it by defining the Python version

conda create --name env_name python=3.10

instead of

conda create --name env_name
Stlouis answered 24/2, 2023 at 20:40 Comment(0)
D
1

With MacOS, I was facing a similar issue. I was able to resolve the issue by changing the python interpreter (appears on bottom left corner) within VS-code.

Decrement answered 27/2, 2022 at 18:1 Comment(0)
C
1

I had a similar issue with macOS Ventura 13.2.1. This was caused by vscode which first activates base then the specified environment. As it has already been suggested

# deactivate Conda environment
# (until even base environment is deactivated)
conda deactivate
# activate your environment
conda activate your_env_name_goes_here

also worked but didn't quite solve the problem since I had to do this every time I opened a vscode terminal. The real problem is that there is no python in the base environment installed so I switched into the base env

# deactivate Conda environment
# (until even base environment is deactivated)
conda deactivate
# activate your environment
conda activate base

Then install python with

conda install python=3.10 #for example

I also had a permission denied error there so I made sure the specific folder had correct access writes before trying again

sudo chmod a+rwx <path_to_miniconda> 
conda install python=3.10 #for example

NOTE: you probably don't need to have the x in a+rwx but I've only tested it this way

PS: I also had some aliases configured in my .zshrc (or .bashrc if you use bash) which I had to remove

alias python=python3
alias pip=pip3

then it worked like a charm!

Hope that helps!

Coston answered 14/3, 2023 at 14:53 Comment(0)
R
0

For me on macos, I found that by setting my condarc to activate base fixed the problem.

auto_activate_base: true

As an aside, and as others have noted elsewhere, it's good policy to deactivate base before activating another conda env.

Rountree answered 11/2 at 0:6 Comment(0)
P
0

For me, since my terminal was opened through VS Code, ultimately clearing my Python cache worked (by opening the command palette):

enter image description here

Pronoun answered 20/4 at 19:24 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.