Can a new env in conda inherit specific packages from base environment

1.4k Views Asked by At

When I create conda environments for my projects where I use pytorch, torch and torchvision packages take along time to install due to slow connection in my region (takes hours sometimes).

Therefore to start working on my projects quickly I don't create a new env, I just use the packages in the base env. I know this will get hairy soon.

That's why I want to know if there is a way to make a new created env inherit specific packages from base env without re-installing.

ps: I understand that conda leverages hard links but I don't understand how to use this in this case. I appreciate your help.

1

There are 1 best solutions below

3
On BEST ANSWER

Cloning

The simplest way to use only already installed packages in a new environment is to clone an existing environment (conda create --clone foo --name bar). Generally, I don't recommend cloning the base environment since it includes Conda and other infrastructure that is only needed in base.

At a workflow-level, it might be advantageous to consider creating some template environments which you can clone for different projects.

YAML Definitions

However, OP mentions only wanting specific packages. I would still create a new env for this, but start with an existing env using an exported YAML.

conda env export -n foo > bar.yaml

Edit the bar.yaml to remove whatever packages that you don't want (again, if foo == base, remove conda), then create the new environment with

conda env create -f bar.yaml --name bar

This will ensure that exactly the packages from the previous environment are used.

Overall, if you using cloning and recreating from YAML files (which include build specifications), then Conda will minimize downloading as well as physical disk usage.