User Tools

Site Tools


other:uvcdat:cdat_conda:miniconda3_install

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
other:uvcdat:cdat_conda:miniconda3_install [2024/03/25 13:14]
jypeter [Downloading the installer] Improved
other:uvcdat:cdat_conda:miniconda3_install [2024/04/15 15:32]
jypeter [Keeping Miniconda3 up-to-date]
Line 1: Line 1:
 ====== JYP steps for installing Miniconda3 ====== ====== JYP steps for installing Miniconda3 ======
  
-===== What? Why? =====+===== Why should you use Miniconda3 ​? =====
  
-  * **//​Miniconda3//​ is a minimal/​bootstrap Python distribution** that can be used for creating more complex Python distributions.\\ It will basically make a recent ''​conda''​ command available on your computer, and you can then use this ''​conda''​ executable to create independent Python distributions, where you can install and update Python packages and their dependencies.+  * **//​Miniconda3//​ is a minimal/​bootstrap Python distribution** that can be used for creating more complex Python distributions.\\ It will basically make a recent ''​conda''​ command available on your computer, and you can then use this ''​conda''​ executable to select an existing distribution,​ or create ​new and independent Python distributions.
  
-  * A **conda //​environment//​** is basically (the short name of the directory) where you install the Python that you will use (independently of //​Miniconda3//​ itself). You have to ''​activate''​ this environment in order to use it\\ A **python //​distribution//​** is the collection of packages you have chosen to install together in a given environment. +  * A **conda //​environment//​** is basically (the short name of the directory) where you install the Python that you will use (independently of //​Miniconda3//​ itself). You have to ''​activate''​ this environment in order to use it\\ A **python //​distribution//​** is the collection of packages ​(and their dependencies) ​you have chosen to install together in a given environment. 
-    * Example: initializing an environment named ''​cdatm_py3''<​code>​$ ​which conda +    * Example: initializing an environment named ''​cdatm_py3'' ​(assuming it exists)<​code>​$ source /​path_to_miniconda/​etc/​profile.d/​conda.sh 
-conda: ​  ​aliased to source /​path_to_miniconda/​etc/​profile.d/​conda.csh+ 
 +$ which conda 
 +/​path_to_miniconda/​condabin/​conda 
 + 
 +$ conda env list 
 +[...] 
 +cdatm_py3 ​               /​path_to_miniconda/​envs/​cdatm_py3 
 +some_other_env ​          /​path_to_miniconda/​envs/​some_other_env
  
 $ conda activate cdatm_py3 $ conda activate cdatm_py3
Line 14: Line 21:
 /​path_to_miniconda/​envs/​cdatm_py3/​bin/​python /​path_to_miniconda/​envs/​cdatm_py3/​bin/​python
 </​code>​ </​code>​
-    * The special environment where //Miniconda// itself is installed is called ''​base''​. Note that the ''​python''​ binary of the ''​base''​ environment is not located in the same directory hierarchy of the other environments (i.e. there is no ''​envs/''​ subdirectory<​code>​$ conda activate base+    * The //special// environment where //Miniconda3// itself is installed is called ''​base''​. Note that the ''​python''​ binary of the //​special// ​''​base''​ environment is not located in the same directory hierarchy ​as the ''​python'' ​of the other environments (i.e. there is no ''​envs/''​ subdirectory<​code>​$ conda activate base
  
 (base) $ which python (base) $ which python
Line 20: Line 27:
 </​code>​ </​code>​
  
-  * You **don'​t need to be (and you should not be) //root//** when you install //​Miniconda3//​. You just need //enough// disk space on a disk where you have write access +  * You **don'​t need to be (and you should not be) //root//** when you install //​Miniconda3//​. You just **need //enough// disk space** on a disk where you have write access 
-    * **WARNING**:​ by default, Miniconda3 will install itself and subsequent Python environments in a hidden ​sub-directory of your home (''​~/​.conda''​ on Linux). **Do not use the default installation location**, if you want to avoid disk space related problems (//disk full//, //quota exceeded//, ...) +    * **WARNING**:​ by default, ​//Miniconda3// will install itself and subsequent Python environments in a sub-directory of your home directory ​(''​~/​miniconda3''​ on Linux). **Do not use the default installation location**, if you want to avoid disk space related problems (//disk full//, //quota exceeded//, ...) 
-    * Choose carefully where you will install Miniconda3, because the size of the installation directory will start at a few Gb and will keep on growing +      * **WARNING**:​ older versions of //​Miniconda3//​ used a **hidden sub-directory** of your home directory (''​~/​.conda''​ on Linux) for the installation 
- +    * Choose carefully where you will install ​//Miniconda3//, because the size of the installation directory will start at a few Gb and will keep on growing
-  * If you are installing Miniconda3 in a Linux environment on a [[other:​win10wsl|Windows 10 computer using Windows Subsystem for Linux (WSL)]], pay special attention to the specific instructions on the **WSL** lines+
  
-  * You could also start with the full //​Anaconda//​ installer that will install a much more complete python environment,​ ready for use.\\ **We choose not to use the full Anaconda installer** because it requires more disk space than Miniconda3 ​at the beginningand all its packages come from the ''​default''​ //channel// (or //​repository//​) provided by the [[https://docs.conda.io/projects/​conda/​en/​latest/​glossary.html#​conda-repository|conda repository]]. This is not very useful (and could even cause complex dependency problems) because we will be mostly using (the same) packages provided by the [[https://​conda-forge.org/​feedstock-outputs/​|conda-forge]] //channel//+  * You //could// also start with the full //​Anaconda// ​(instead of //​Miniconda//​) ​installer that will install a much more complete python environment,​ ready for use.\\ **We choose not to use the full //Anaconda// installer** because
- +    * it requires more disk space than //Miniconda3// during ​the initial installation, 
-Note: some extra details are available on the much older page //​Installing and maintaining UV-CDAT with conda//. You can check later the [[other:​uvcdat:​conda_notes#​useful_conda_commands|Useful conda commands]]but the [[https://​docs.conda.io/​projects/​conda/​en/​latest/​index.html|official conda documentation]] and the [[https://​docs.conda.io/​projects/​conda/​en/​latest/​user-guide/​cheatsheet.html|Cheat sheet]] are probably more up-to-date.+    * all the //​Anaconda//​ installer ​packages come from the ''​default''​ //channel// (or //​repository//​) provided by the [[https://anaconda.org/|conda repository]].\\ This is not very useful ​for us (and could even cause complex dependency problems ​later) because we will be mostly using (the same) packages provided by the [[https://​conda-forge.org/​feedstock-outputs/​|conda-forge]] //​channel//, ​**in order to avoid complex package dependency problems**.
  
 ===== Installing miniconda3 on a Linux-like computer ===== ===== Installing miniconda3 on a Linux-like computer =====
  
 <WRAP center round tip 60%> <WRAP center round tip 60%>
-By //​Linux-like//,​ we mean:+By **//​Linux-like//​**, we mean:
   * A native Linux computer (or server)   * A native Linux computer (or server)
   * A windows 10 computer with [[other:​win10wsl|WSL+Ubuntu installed]]   * A windows 10 computer with [[other:​win10wsl|WSL+Ubuntu installed]]
Line 39: Line 45:
 </​WRAP>​ </​WRAP>​
  
 +<WRAP center round info 60%>
 +**//Pure Windows//** Note: you can also follow the steps listed in the [[https://​docs.anaconda.com/​free/​miniconda/#​quick-command-line-install|Windows section of "Quick command line install"​]] to install a //pure Windows// version of miniconda3, and then follow the steps listed in the next sections of this page.\\ We assume below that the installer is downloaded in the ''​C:​\Scratch\your_login''​ directory, and we install Miniconda3 in a ''​C:​\Utils\miniconda3_2024-03''​ directory. <​code>​PS C: cd C:​\Scratch\your_login
 +PS C:​\Scratch\your_login>​ curl https://​repo.anaconda.com/​miniconda/​Miniconda3-latest-Windows-x86_64.exe -o miniconda.exe
 +PS C:​\Scratch\your_login>​ .\miniconda.exe
 +PS C:​\Scratch\your_login>​ del .\miniconda.exe
 +</​code>​
 +</​WRAP>​
  
-==== Downloading the installer ====+ 
 + 
 +==== Downloading the Miniconda3 ​installer ====
  
   * We use a download link that always point to the [[https://​docs.anaconda.com/​free/​miniconda/#​latest-miniconda-installer-links|latest version of the Linux installer]]   * We use a download link that always point to the [[https://​docs.anaconda.com/​free/​miniconda/#​latest-miniconda-installer-links|latest version of the Linux installer]]
Line 52: Line 67:
 $ cd /​homedata/​$USER/​Scratch</​code>​ $ cd /​homedata/​$USER/​Scratch</​code>​
     * e.g. Linux on a **personal PC/Mac desktop/​laptop**:​ use a scratch/​temporary directory with //enough// space     * e.g. Linux on a **personal PC/Mac desktop/​laptop**:​ use a scratch/​temporary directory with //enough// space
-    * e.g. **WSL**, assuming that there is a ''​C:​\Scratch\<​your_login>''​ directory:​\\ ''​cd /​mnt/​c/​Scratch/<​your_login>''​ 
  
   * Use ''​wget''​ to download the latest installer (138 Mb as of 22 Mar 2024):\\ <​code>​$ wget https://​repo.anaconda.com/​miniconda/​Miniconda3-latest-Linux-x86_64.sh   * Use ''​wget''​ to download the latest installer (138 Mb as of 22 Mar 2024):\\ <​code>​$ wget https://​repo.anaconda.com/​miniconda/​Miniconda3-latest-Linux-x86_64.sh
Line 58: Line 72:
 [...] 138M Feb 27 20:40 Miniconda3-latest-Linux-x86_64.sh</​code>​ [...] 138M Feb 27 20:40 Miniconda3-latest-Linux-x86_64.sh</​code>​
  
-==== Using the installer ====+==== Using the Miniconda3 ​installer ====
  
 We assume below that we are in the [[#​downloading_the_installer|directory where we have downloaded the installer]] We assume below that we are in the [[#​downloading_the_installer|directory where we have downloaded the installer]]
  
-  * Determine the directory where you will install miniconda3 and all the Python environments based on this version of miniconda3, but **do not create the directory** (the installation script will do it) +  ​* **Determine the directory where you will install miniconda3 and all the Python environments** based on this version of miniconda3, but **do not create the directory** (the installation script will do it)\\ **We will later refer to this location as ''/​path_to_miniconda3/''​** 
-    * Remember that you will need a few Gb of available space +    * Remember that **you will need a few Gb of available space** 
-    * At LSCE, do not install in a subdirectory ​of your home directory!+    * **If you want to share this installation with other users**, the directory has to be readable by these users 
 +    * At LSCE, **do not** install in a sub-directory ​of your home directory! 
 +      * On other servers and computers, you should also **avoid installing in your //home// directory**,​ if you want to be able to easily make backups or your //home//, without backing up thousands of files related to your Python installation...
     * We add some date or version information at the end of the directory, in order to differentiate it from other (older of future) installations     * We add some date or version information at the end of the directory, in order to differentiate it from other (older of future) installations
-    * e.g. Linux at LSCE: ''/​home/​share/​unix_files/​cdat/​miniconda3_2024-03''​ +    * e.g. Linux at **LSCE**: ''/​home/​share/​unix_files/​cdat/​miniconda3_2024-03''​ 
-    * e.g. Linux at spiritx: ''/​homedata/​$USER/​miniconda3_2024-03''​ +    * e.g. Linux at **spiritx**: ''/​homedata/​$USER/​miniconda3_2024-03''​ 
-    * e.gWSL FIXME+    * Linux (including WSL) on a **personal PC/Mac desktop/​laptop**:​ find a directory with enough space (including space for adding more packages and their future updates) 
 +      * You may want to use a directory that you are not backing up, if you want to avoid having to save thousands of files...
  
   * Execute the installer with ''​$ bash Miniconda3-latest-Linux-x86_64.sh''​   * Execute the installer with ''​$ bash Miniconda3-latest-Linux-x86_64.sh''​
     * Review the license (type ''<​SPACE>''​ several times...) and accept it     * Review the license (type ''<​SPACE>''​ several times...) and accept it
-    * When asked for the installation directory, ​use the directory ​name chosen ​above, and **not the default directory** +    * When asked for the installation directory, ​specify ​the directory ​location ​chosen ​in the previous step, and **not the default directory** 
-    * **Answer ''​no''​ to the question ''​Do you wish to update your shell profile to automatically initialize conda?''​**. Otherwise the installation will make changes to your shell configuration files+      * e.g. specify\\ ''/​path_to_miniconda3/''​\\ instead of the default\\ ''​$HOME/​miniconda3''​ 
 +    * **Answer ''​no''​ to the question ''​Do you wish to update your shell profile to automatically initialize conda?''​**.\\ Otherwise the installation will make changes to your shell configuration files
       * If you forget to answer ''​no'',​ you can apparently:       * If you forget to answer ''​no'',​ you can apparently:
         * remove the changes to your shell configuration files by typing later: ''​conda init --reverse $SHELL''​         * remove the changes to your shell configuration files by typing later: ''​conda init --reverse $SHELL''​
Line 80: Line 98:
 647M    miniconda3_2024-03 647M    miniconda3_2024-03
  
-$ cd miniconda3_2024-03 +$ du -sh miniconda3_2024-03/​
- +47M     miniconda3_2024-03/​bin 
-$ du -sh * +16K     miniconda3_2024-03/​cmake 
-47M     bin +8.0K    ​miniconda3_2024-03/​compiler_compat 
-16K     ​cmake +32M     miniconda3_2024-03/​_conda 
-8.0K    compiler_compat +8.0K    ​miniconda3_2024-03/​condabin 
-32M     ​_conda +976K    miniconda3_2024-03/​conda-meta 
-8.0K    condabin +4.0K    ​miniconda3_2024-03/​envs 
-968K    ​conda-meta +28K     miniconda3_2024-03/​etc 
-4.0K    envs +18M     miniconda3_2024-03/​include 
-28K     etc +317M    ​miniconda3_2024-03/​lib 
-18M     ​include +92K     miniconda3_2024-03/​LICENSE.txt 
-317M    lib +1.1M    ​miniconda3_2024-03/​man 
-92K     ​LICENSE.txt +232M    miniconda3_2024-03/​pkgs 
-1.1M    man +396K    ​miniconda3_2024-03/​sbin 
-231M    ​pkgs +1.5M    miniconda3_2024-03/​share 
-396K    sbin +12K     miniconda3_2024-03/​shell 
-1.4M    ​share +8.0K    ​miniconda3_2024-03/​ssl 
-12K     ​shell +8.0K    ​miniconda3_2024-03/​x86_64-conda_cos7-linux-gnu 
-8.0K    ssl +8.0K    ​miniconda3_2024-03/​x86_64-conda-linux-gnu
-8.0K    x86_64-conda_cos7-linux-gnu +
-8.0K    x86_64-conda-linux-gnu+
 </​code>​ </​code>​
  
   * Initialize the newly installed conda environment (this will initialize the environment **only in the current terminal**):​   * Initialize the newly installed conda environment (this will initialize the environment **only in the current terminal**):​
-    * bash shell: ''​source ​<​installation_path>​/​miniconda3_2024-03/​etc/​profile.d/​conda.sh''​ +    ​* **bash shell**: ''​source ​/​path_to_miniconda3/​etc/​profile.d/​conda.sh''​ 
-    * tcsh shell: ''​source ​<​installation_path>​/​miniconda3_2024-03/​etc/​profile.d/​conda.csh''​+      * e.g. (spiritx): ''​source /​homedata/​jypmce/​miniconda3_2024-03/​etc/​profile.d/​conda.sh''​ 
 +    ​* **tcsh shell**: ''​source ​/​path_to_miniconda3/​etc/​profile.d/​conda.csh''​ 
 +      * e.g. (LSCE): ''​source /​home/​share/​unix_files/​cdat/​miniconda3_2024-03/​etc/​profile.d/​conda.csh''​
  
   * Check if you can use the ''​conda''​ command, and use it to initialize the //base// environment   * Check if you can use the ''​conda''​ command, and use it to initialize the //base// environment
-    * <​code>​$ which conda +    * e.g. on **spiritx1**: ​<​code>​$ which conda
-<​installation_path>/​miniconda3/​condabin/​conda+
 $ which python $ which python
 /​usr/​bin/​python /​usr/​bin/​python
-$ conda activate 
-(base) $ which python 
-<​installation_path>/​miniconda3/​bin/​python</​code>​ 
-  * Update the new installation 
-    * <​code>​$ conda update --all 
-[...]</​code>​ 
-    * During the update, the ''​miniconda3''​ directory size goes from 432 Mb to 581 Mb. This directory will keep on growing, which is the reason why you should put it on a (preferably non backed up) disk where you have //enough// space 
  
-  * Make sure we have the latest ''​conda''​ package (just in case we did not get it with the //update//)\\ ''​conda update ​-n base conda''​+$ source ​/homedata/jypmce/miniconda3_2024-03/​etc/​profile.d/​conda.sh
  
-  * Remove the installer later, when you have tester your installation:​\\ ''​rm Miniconda3-latest-Linux-x86_64.sh''​+$ which conda 
 +/​homedata/​jypmce/​miniconda3_2024-03/​condabin/​conda 
 +$ which python 
 +/​usr/​bin/​python
  
-===== Initializing ​conda in new terminals =====+conda activate base
  
-When you open a terminal, your shell needs to know where to find the ''​conda''​ command used to initialize an environment,​ or switch between environments+(base) $ which conda 
 +/​homedata/​jypmce/​miniconda3_2024-03/​bin/​conda 
 +(base) $ which python 
 +/​homedata/​jypmce/​miniconda3_2024-03/​bin/​python
  
-==== General case ====+(base) $ conda deactivate
  
-You were asked the following question when installing miniconda3: ​//Do you wish the installer to initialize Miniconda3 by running ​conda init? [yes|no]//+$ which conda 
 +/homedata/​jypmce/​miniconda3_2024-03/​condabin/conda 
 +$ which python 
 +/usr/bin/python 
 +</code>
  
-  * If you answered ​//yes//, the installer ​probably added some very complicated lines to your shell configuration files, but you probably have ''​conda''​ directly available when you open a new terminal +  * Remove the //Miniconda3// installer: ''​$ rm Miniconda3-latest-Linux-x86_64.sh''​ 
-  * if you answered //no// (as suggested), use a text editor to add an extra line to the appropriate configuration file +==== Fine-tuning conda to use (only) ​conda-forge ====
-    * //bash// useradd this line to ''​~/​.bashrc''​\\ ''​source <​installation_path>/​miniconda3/​etc/​profile.d/​conda.sh''​ +
-    * //tcsh// user: add this line to ''​~/​.cshrc''​\\ ''​source <​installation_path>/​miniconda3/​etc/​profile.d/​conda.csh''​+
  
-We choose ​**not** to add a ''​conda ​activate env_name'' ​line to the shell configuration files, in order to avoid side effects. When we open a new terminal, we get the default python available on the system. When we need a specific python environment,​ we just open a new window ​and then explicitly type: ''​conda activate env_name''​+  ​* ''​conda'' ​will probably work fine with the default settings **if you create simple ​new environments** with just one package ​and its dependencies.
  
-==== Multi-user installation ====+  * ''​conda''​ works much better and faster since the end of 2023 (''​conda''​ versions starting at ''​23.10''​),​ now that it is [[https://​conda.org/​blog/​2023-07-05-conda-libmamba-solver-rollout/​|using the mamba solver]] instead of the default solver. 
 +    * If you have followed all the steps of this section in order to **use only //​conda-forge//​ packages**, and there are still some problems with a recent version of ''​conda'',​ try to install and use [[https://​mamba.readthedocs.io/​|mamba]],​ as a drop-in replacement of conda 
 +    * Historical note: before ''​conda''​ used ''​libmamba'',​ we had to use ''​mamba''​ (instead of ''​conda''​) for dealing with our complex Python environments:​ 
 +      * [[https://​wolfv.medium.com/​making-conda-fast-again-4da4debfb3b7|Making conda fast again]] 
 +      * [[https://​github.com/​conda/​conda/​issues/​9367#​issuecomment-793968239|Solving environment:​ failed with initial frozen solve. Retrying with flexible solve.]]
  
-In the case of **python ​environments ​maintained by a single user, but used by several users**, we could do the same as in the //General case//, but it can be useful ​to have the users //source// an intermediate initialization filethat will then //source// the initialization file used in the general case. This makes it easier to maintain and change the environments,​ without asking users to make changes.+  ​We are power users, and **we intend to create complex Python ​environments** ​combining lots (and lots) of packages available from ''​conda-forge''​with complex dependencies,​ and we may run into dependency problems when combining packages coming from both conda and conda-forge. 
 +    * => **The solution is to configure conda to always use conda-forge**and completely update ​//Miniconda3// itself with packages coming only from conda-forge
  
-  * ask //bash// users to add to ''​~/​.bashrc''​ something like\\ ''​source ​ ~main_installer_login/​.conda3_jyp.sh''​\\ \\ with a ''​.conda3_jyp.sh'' ​file looking like {{ :​other:​uvcdat:​cdat_conda:​conda3_jyp.sh.txt |}}+=== Changing the .condarc ​file ===
  
-  ​ask //tcsh// users to add to ''​~/.cshrc'' ​something like\\ ​''​source ​ ~main_installer_login/.conda3_jyp.csh''​\\ \\ with a ''​.conda3_jyp.csh''​ file looking like {{ :other:uvcdat:​cdat_conda:​conda3_jyp.csh.txt |}}+The following steps will **make sure that we only get packages from //conda-forge//**  (same thing as using the ''​-c conda-forge'' ​option) by default unless the requested packages really don't exist on //​conda-forge/​/. More details in [[https://docs.conda.io/​projects/​conda/​en/​latest/​user-guide/​tasks/​manage-channels.html|Managing channels]]
  
-===== Fine-tuning conda =====+<​code>​$ cat ~/​.condarc 
 +cat: /​home/​jypmce/​.condarc:​ No such file or directory
  
-conda will probably work fine with the default settings for creating new environments with just one package (e.g. [[https://​github.com/​NOAA-PMEL/​PyFerret/#​anaconda-installation---linux-os-x-and-windows-10bash|just PyFerret]]).+conda config ​--get channels
  
-We intend to **create complex environments** (combining lots of packages, with complex dependencies) and it is highly recommended to use the specific settings described in this section+$ conda config --prepend channels conda-forge 
 + 
 +$ conda config --set channel_priority strict 
 + 
 +$ conda config --get channels 
 +--add channels '​defaults' ​  # lowest priority 
 +--add channels '​conda-forge' ​  # highest priority 
 + 
 +$ cat ~/​.condarc 
 +channels: 
 +  - conda-forge 
 +  - defaults 
 +channel_priority:​ strict 
 +</​code>​
  
-==== Getting conda configuration information ​====+=== Getting conda configuration information ===
  
   * [[https://​docs.conda.io/​projects/​conda/​en/​latest/​commands/​config.html|conda config]] documentation   * [[https://​docs.conda.io/​projects/​conda/​en/​latest/​commands/​config.html|conda config]] documentation
   * Basic information:​ ''​conda info''​   * Basic information:​ ''​conda info''​
-  * Full configuration:​ ''​conda config --show''​+  * Full configuration:​ ''​conda config ​%%--%%show''​
  
-==== Changing the .condarc file ====+==== Updating (Mini)conda ​====
  
-Most of the packages we will install will be provided by the //conda-forge// channel (''​-c conda-forge''​ option). The installation steps will also add dependencies that will theoretically come from //conda-forge//, but could also come from the //​defaults// ​channel.+We have to **completely update ​//Miniconda3// at least once after installing //​Miniconda3//​** and [[#fine-tuning_conda_to_use_only_conda-forge|making ​conda-forge the highest priority ​channel]]
  
-The following will **make sure that we only get packages from //conda-forge//** unless the requested ​packages ​really don't exist on //​conda-forge//​ (see [[https://docs.conda.io/​projects/​conda/​en/​latest/​user-guide/​tasks/​manage-channels.html|Managing channels]] ​and [[https://conda-forge.org/docs/​user/​tipsandtricks.html#​how-to-fix-it|Using multiple channels =How to fix it]])+  ​Check the current version of ''​conda''​ 
 +    ​<​code>​$ ​conda list -n base | grep conda 
 +packages ​in environment at /path_to_miniconda: 
 +conda                     24.1.2          py312h06a4308_0 
 +conda-libmamba-solver ​    ​23.12.0 ​           pyhd3eb1b0_1 
 +[... and other packages with 'conda' in their name] 
 +</code>
  
-<​code>​$ conda config ​--add channels conda-forge +  * Completely update the //​Miniconda3//​ installation 
-$ conda config --set channel_priority strict +    * <​code>​$ conda update ​-n base --all 
-$ cat ~/.condarc +Channels
-channels+ - conda-forge 
-  - conda-forge + - defaults 
-  - defaults +Platformlinux-64 
-channel_prioritystrict</​code>​+Collecting package metadata (repodata.json):​ done 
 +Solving environment:​ done
  
-==== Using mamba instead of conda ====+## Package Plan ##
  
-Even when using a proper ''​.condarc''​ in order to get packages coming only from //​conda-forge//,​ ''​conda install''​ may fail to solve the dependencies after meditating during an enormous time (e.g. [[https://github.com/conda/​conda/​issues/​9367#​issuecomment-793968239|Solving environment:​ failed with initial frozen solve. Retrying with flexible solve.]]), when we try to deal with **complex environments** (i.e. we already have lots of installed packages and we want to add even more packages).+  environment location: /homedata/jypmce/miniconda3_2024-03
  
-Using CDAT as a base environment,​ and adding a lot of extra packages is a **complex environment**. 
  
-The only solution seems to replace ''​conda''​ with [[https://​github.com/​mamba-org/​mamba|mamba]],​ a reimplementation of the conda package manager in C++ ([[https://​wolfv.medium.com/​making-conda-fast-again-4da4debfb3b7|Making conda fast again]]): +The following packages will be downloaded:
-  * Install ''​mamba''​ in the //base// (i.e. //​miniconda//​) environment\\ ''​conda install mamba -n base -c conda-forge''​ +
-  * Use ''​mamba''​ instead of ''​conda''​ when installing packages.\\ Theoretically,​ you don't need to specify ''​install -c conda forge''​ any more, because ''​conda-forge''​ is now the default source of new packages\\ ''​mamba install lots_of_packages''​+
  
 +    package ​                   |            build
 +    ---------------------------|-----------------
 +    conda-24.3.0 ​              ​| ​ py312h7900ff3_0 ​        1.1 MB  conda-forge
 +    conda-libmamba-solver-24.1.0| ​    ​pyhd8ed1ab_0 ​         40 KB  conda-forge
 +    python-3.12.2 ​             |hab00c5b_0_cpython ​       30.8 MB  conda-forge
 +[...]
 +The following NEW packages will be INSTALLED:
 +[...]
 +The following packages will be UPDATED:
 +[...]
 +  conda              pkgs/​main::​conda-24.1.2-py312h06a4308~ --> conda-forge::​conda-24.3.0-py312h7900ff3_0
 +[...]
 +The following packages will be SUPERSEDED by a higher-priority channel:
 +[...]
 +Proceed ([y]/n)? y
 +[...]
 +Preparing transaction:​ done
 +Verifying transaction:​ done
 +Executing transaction:​ done
 +</​code>​
 +  * Check the updated version of ''​conda''​. Note that **(almost) all** the packages should now specify that they are provided by ''​conda-forge''​
 +    * <​code>​$ conda list -n base
 +conda                     ​24.3.0 ​         py312h7900ff3_0 ​   conda-forge
 +conda-libmamba-solver ​    ​24.1.0 ​            ​pyhd8ed1ab_0 ​   conda-forge
 +python ​                   3.12.2 ​         hab00c5b_0_cpython ​   conda-forge
 +</​code>​
 +    * You can use the following to determine if some packages are not provided by ''​conda-forge''​
 +      * <​code>​$ conda list -n base | grep -v conda-forge
 +# Name                    Version ​                  ​Build ​ Channel
 +libedit ​                  ​3.1.20230828 ​        ​h5eee18b_0
 +libffi ​                   3.4.4                h6a678d5_0
 +xz                        5.4.5                h5eee18b_0
 +</​code>​
 +      * It should not be a major problem if a few packages are not provided by ''​conda-forge''​.\\ It only means that some packages provided by the ''​anaconda''​ //channel// were more recent than the same packages provided by the ''​conda-forge''​ //channel// when the packages were updated
 +        * ''​libedit''​ example: [[https://​anaconda.org/​conda-forge/​libedit|version 3.1.20191231 @ conda-forge]] and [[https://​anaconda.org/​anaconda/​libedit|version 3.1.20230828 @ anaconda]]
 +
 +  * You can later update again the full //​Miniconda3//,​ or just the ''​conda''​ command.\\ This should not make any changes to the Python environment(s) have have installed with ''​conda''​
 +    * <​code>​$ conda update -n base --all
 +[...]
 +# All requested packages already installed.
 +
 +(base) $ conda update -n base conda
 +[...]
 +# All requested packages already installed.
 +</​code>​
 +
 +  * Note: during this installation,​ the ''​miniconda3''​ directory size grew from 763 Mb to 1.6 Gb, and we have not installed any custom Python environment yet! This is the reason why you should install //​Miniconda3//​ on a (preferably non backed up) disk where you have //enough// space
 +    * <​code>​$ du -sh /​homedata/​jypmce/​miniconda3_2024-03
 +736M    /​homedata/​jypmce/​miniconda3_2024-03
 +[... update]
 +$ du -sh /​homedata/​jypmce/​miniconda3_2024-03
 +1.6G    /​homedata/​jypmce/​miniconda3_2024-03
 +</​code>​
 +
 +  * You can [[https://​docs.conda.io/​projects/​conda/​en/​latest/​commands/​clean.html|clean]] the initial //​Miniconda3//​ installation to free up some disk space. The documentation specifies //WARNING: This will break environments with packages installed using symlinks back to the package cache.// and **you should probably avoid using ''​clean''​ once you have installed new Python environments** (unless you are desperate for disk space and know how to do a complete re-installation if something breaks...)
 +    * <​code>​(base) $ conda clean --all
 +Will remove 154 (180.9 MB) tarball(s).
 +Proceed ([y]/n)? y
 +
 +Will remove 1 index cache(s).
 +Proceed ([y]/n)? y
 +
 +Will remove 74 (378.0 MB) package(s).
 +Proceed ([y]/n)? y
 +
 +There are no tempfile(s) to remove.
 +There are no logfile(s) to remove.
 +
 +(base) $ du -sh /​homedata/​jypmce/​miniconda3_2024-03
 +457M    /​homedata/​jypmce/​miniconda3_2024-03
 +</​code>​
 +===== Initializing conda in terminals =====
 +
 +When you open a terminal, your shell needs to know where to find the ''​conda''​ command used to initialize an environment,​ or switch between existing environments. This can be **configured in the //shell// configuration files**
 +
 +==== Single-user installation ====
 +
 +You were asked the following question when installing //​Miniconda3//:​ //Do you wish to update your shell profile to automatically initialize conda? [yes|no]//
 +
 +  * **If you answered //yes//**, the installer probably added some very complicated lines to your shell configuration files, and ''​conda''​ and the newly installer ''​python''​ are probably directly available when you open a new terminal.
 +
 +  * **If you answered //no//** ([[#​using_the_miniconda3_installer|as suggested]]),​ use a [[other:​newppl:​starting#​text_editors|text editor]] to add extra lines to the appropriate shell configuration file
 +    * **bash shell** user : add these lines to ''​~/​.bashrc''​\\ <​code>​source /​path_to_miniconda3/​etc/​profile.d/​conda.sh
 +alias pynit='​conda activate base'</​code>​
 +      * e.g. (spiritx):<​code>​source /​homedata/​jypmce/​miniconda3_2024-03/​etc/​profile.d/​conda.sh
 +alias pynit='​conda activate base'</​code>​
 +    * **tcsh shell** user: add these lines to ''​~/​.cshrc''​\\ <​code>​source /​path_to_miniconda3/​etc/​profile.d/​conda.csh''​
 +alias pynit 'conda activate base'</​code>​
 +      * e.g. (LSCE):<​code>​source /​home/​share/​unix_files/​cdat/​miniconda3_2024-03/​etc/​profile.d/​conda.csh
 +alias pynit 'conda activate base'</​code>​
 +    * When you have a custom Python environment installed (e.g. ''​my_power_env'',​ you can update the ''​pynit''​ alias to initialize this environment instead of the ''​base''​ environment (e.g. ''​conda activate my_power_env''​)
 +    * You can also define other aliases, or use another name than ''​pynit''​!
 +
 +We choose **not** to directly add a ''​conda activate env_name''​ line to the shell configuration files. This would permanently initialize ''​env_name''​ and may cause future (and obscure) side effects.
 +
 +When we open a new terminal, we get the default Python available on the system. If we need a specific Python environment,​ we just open a new window and then explicitly type ''​conda activate env_name''​ or the ''​pynit''​ alias defined above
 +
 +==== Multi-user installation ====
 +
 +In the case of **python environments maintained by a single user, but used by several users**, we could do the same as in the //General case//, but it can be useful to have the users //source// an intermediate initialization file, that will then //source// the initialization file used in the general case. This makes it easier to maintain and change the environments,​ without asking users to make changes.
 +
 +  * ask //bash// users to add to ''​~/​.bashrc''​ something like\\ ''​source ​ ~main_installer_login/​.conda3_jyp.sh''​\\ \\ with a ''​.conda3_jyp.sh''​ file looking like {{ :​other:​uvcdat:​cdat_conda:​conda3_jyp.sh.txt |}}
 +
 +  * ask //tcsh// users to add to ''​~/​.cshrc''​ something like\\ ''​source ​ ~main_installer_login/​.conda3_jyp.csh''​\\ \\ with a ''​.conda3_jyp.csh''​ file looking like {{ :​other:​uvcdat:​cdat_conda:​conda3_jyp.csh.txt |}}
 +
 +===== Keeping Miniconda3 up-to-date =====
 +
 +  * Just type ''​conda update -n base %%--%%all''​ as shown in the [[#​updating_mini_conda|Updating (Mini)conda]] section
 +
 +  * The ''​base''​ (miniconda3) and the other environments are all independent and can be updated independently
 +
 +  * It is up to you to decide if you want to update environments or not
 +===== conda resources =====
 +
 +Note: some extra details are available on the much older page //​Installing and maintaining UV-CDAT with conda//. You can check later the [[other:​uvcdat:​conda_notes#​useful_conda_commands|Useful conda commands]], but the [[https://​docs.conda.io/​projects/​conda/​en/​latest/​index.html|official conda documentation]] and the [[https://​docs.conda.io/​projects/​conda/​en/​latest/​user-guide/​cheatsheet.html|Cheat sheet]] are probably more up-to-date.
  
 /* standard page footer */ /* standard page footer */
other/uvcdat/cdat_conda/miniconda3_install.txt · Last modified: 2024/07/08 13:28 by jypeter