I use a conda environment with a lot of dependencies and some personal packages compiled with conda-build.
When doing conda activate iota2_dev
I'll update the $PATH
variable to propose some executable to the user.
The activate.sh
script is available here
After doing conda deactivate the following /home/btardy/miniconda3/envs/iota2_dev/bin
is still in $PATH
.
However the following added in activate.sh ${CONDA_PREFIX}/lib/python3.6/site-packages/iota2:${CONDA_PREFIX}/lib/python3.6/site-packages/iota2/Common/Tools:
is well removed after conda deactivate
After looking at all activate scripts in /home/btardy/miniconda3/envs/iota2_dev/etc/conda/activate.d
no one update $PATH
variable.
It seems that when entering in the first activate.sh script $PATH
was already modified with /home/btardy/miniconda3/envs/iota2_dev/bin
... then it seems that our activate/deactivate procedure works well.
The question is why and how the $PATH
is modified before, and why it is not reset at the end.
If I comment the $PATH
modification in our activate.sh
, the path is correctly cleared after conda deactivate. But we loose simple access to executables.
What happened:
~$ echo $PATH
/home/btardy/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
~$ conda activate iota2_dev
(iota2) ~$ echo $PATH
/home/btardy/miniconda3/envs/iota2_dev/lib/python3.6/site-packages/iota2:/home/btardy/miniconda3/envs/iota2_dev/lib/python3.6/site-packages/iota2/Common/Tools:/home/btardy/miniconda3/envs/iota2_dev/bin:/home/btardy/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
(iota2) ~$ conda deactivate
~$ echo $PATH
/home/btardy/miniconda3/envs/iota2_dev/bin:/home/btardy/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
What should happened:
~$ echo $PATH
/home/btardy/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
~$ conda activate iota2
(iota2) ~$ echo $PATH
/home/btardy/miniconda3/envs/iota2_dev/lib/python3.6/site-packages/iota2:/home/btardy/miniconda3/envs/iota2_dev/lib/python3.6/site-packages/iota2/Common/Tools:/home/btardy/miniconda3/envs/iota2_dev/bin:/home/btardy/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
(iota2) ~$ conda deactivate
~$ echo $PATH
/home/btardy/miniconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
With an environment containing other packages (no $PATH modification in activate.sh) the path is correctly cleared after conda deactivate. I did not found how conda natively store and restore $PATH. There is a variable somewhere that we can use in our scripts to restore correctly the path ?
Any help or explanations about the behaviour of conda activate when no activate.sh script are available will be also useful.
This question is also on conda github )