Taking the manual steps and creating automation
Taking the manual steps and create automation
Creating a virtual environment in Anaconda is a straight forward task using the conda create -n env-namme
command. By default, the new environment will be created in the folder of the anaconda/miniconda installation. For example in a Linux machine the environments are under the directory of ~/miniconda3/envs
. Now, if we are working in projects that involve creating multiple conda environments, it might become tedious to always creating this environments with the manual way, installing each and every package by sequentially type the commands on the terminal. Of course we can add the most used packages to the ~/.condarc
file and save some time. But, the other day I had to create, again, a virtual environment and I thought that it might be useful to automate as much as possible I can the procedure of crating virtual environments.
Prerequisites
- Linux
- For the script to work need the anaconda or miniconda to be installed (see my previous posts on how to install miniconda)
- If other than the bash shell is used (for example zsh), need to make sure the script will be properly executed. The easiest way is to just add
#!/usr/bin/env bash
at the top of the script so we can run it even if we use other shells
Designing the conda-env-automation
- To create a virt env we use the
conda create -n test-env
command. Since the script would be asking the user for the name of the env, need to have a user input for the name of env.
echo env_name
- Since, we use anaconda environments to work with different python versions and packages, need to have a input that determines the version of Python as well as the packages will be install during the environment creation.
conda create -n test-env python=3.x package1 package2
- Also can ask to activate the newly created environment
conda activate test-env
Optional operations
- Create an export (backup file) of the environment. This is helpful if someone else want to reproduce our work using the same environment.
conda test_env export > environment_backup.yml
A diagram representation of the steps
Code Implementation
Initially will set a variable name for the location of the environments directory in the miniconda location. Also, will give the list of any existing environments.
ENV_PATH="$HOME/miniconda3/envs"
echo "The folowing environments are installed:$(ls $ENV_PATH)"
Then, will check if the environment we like to crate exists and if so the process will exit the script
dir_path="$ENV_PATH/$env_name"
if [ -d "$dir_path" ];
then
echo "$env_name environment exists."
slee 1
exit 0
else
echo "$env_name environment does not exist."
sleep 1
echo "Will create the $env_name conda environment"
fi
The dir_path
variable gives the location of the environment, if that exists in the envs
folder, The if
statement looks for the particular environment, and if that exists will exit the script, if not the will continue to create the environment.
The conda environments are used in the most of the cases to have a specific python version. So, the next part will ask for what python version of python we want.
read -rp "Enter the Python version(only number): " py_ver
Also, most of the times we install particular packages will we create the environment. This can be done with following
read -rp "Enter additional packages to install: " packages
Now that we have the python version and the packages we can create the environment
conda create -n $env_name python=$py_ver $packages -y
The environment now has been crated and can use it by activating it with the conda activate test-env
for example.
We can further automate the process and prompt a question if we want to use the env after the creation. The script will ask if we want to activate the environment, if yes specified then will enter to it and if no will continue to the next step, witch is to create an export of the environment.
read -rp "Do you like to activate $env_name environemnt?" ask &&
if [ "$ask" = "y" ]; then
printf "Activating the environment...\\n"
conda activate $env_name
else
continue
fi
Sometimes we might need to use a specific environment to another computer, or to send it to colleagues in our team for example to replicate the work we've done. This can be done if we export the .yml
of the environment. So, the process can be automated to export the basic environment created initially. The script will ask if we want a backup file, if no the script will exit. If we do want to create a backup file of the environment then need to activate it and export the environment. Last, will deactivate the environment and exit the script.
read -rp "Do you want to create a backup for the $env_name?" ask &&
if [ "$ask" = "y" ]; then
printf "Creating the backup.yml\n"
conda activate $env_name && conda env export > "$env_name.yml"
conda deactivate
echo "The backup file crated."
else
exit 0
fi