How to update an existing Conda environment with a .yml file
How can a pre-existing conda environment be updated with another .yml file. This is extremely helpful when working on projects that have multiple requirement files, i.e. base.yml, local.yml, production.yml
, etc.
For example, below is a base.yml
file has conda-forge, conda, and pip packages:
base.yml
name: myenv
channels:
- conda-forge
dependencies:
- django=1.10.5
- pip:
- django-crispy-forms==1.6.1
The actual environment is created with:
conda env create -f base.yml
.
Later on, additional packages need to be added to base.yml
. Another file, say local.yml
, needs to import those updates.
Previous attempts to accomplish this include:
creating a local.yml
file with an import definition:
channels:
dependencies:
- pip:
- boto3==1.4.4
imports:
- requirements/base.
And then run the command:
conda install -f local.yml
.
This does not work. Any thoughts?
Try using conda env update:
conda activate myenv
conda env update --file local.yml --prune
--prune
uninstalls dependencies which were removed from local.yml
, as pointed out in this answer by @Blink.
Or without the need to activate the environment (thanks @NumesSanguis):
conda env update --name myenv --file local.yml --prune
See Updating an environment in Conda User Guide.
The suggested answer is partially correct. You'll need to add the --prune option to also uninstall packages that were removed from the environment.yml. Correct command:
conda env update -f local.yml --prune
alkamid's answer is on the right lines, but I have found that Conda fails to install new dependencies if the environment is already active. Deactivating the environment first resolves this:
source deactivate;
conda env update -f whatever.yml;
source activate my_environment_name; # Must be AFTER the conda env update line!