Can I add a channel to a specific conda environment?

PythonEnvironmentConda

Python Problem Overview


I want to add a conda channel to a specific conda environment but when I use

conda config --add channels glotzer

that channel is now available from all my conda environments. In addition to testing an install from another environment, the ~/.condarc file has the following:

channels:
  - glotzer
  - defaults

How would I configure conda so the channel is only available from a specific environment?

I did find in the channel documentation that for conda >= 4.1.0, putting channels at the bottom of the ~/.condarc will prevent added channels from overiding the core package set.

> By default conda now prefers packages from a higher priority channel over any version from a lower priority channel. Therefore you can now safely put channels at the bottom of your > channel list to provide additional packages that are not in the > default channels, and still be confident that these channels will not > override the core package set.

I expect this will prevent most problems, except when in one environment you do want the package added through a channel to override a core package.

Python Solutions


Solution 1 - Python

As of conda 4.2, environment-specific .condarc files are supported and you can write:

conda config --env --add channels glotzer

to add the channel to the configuration for the active environment.

[Not sure whether --env flag was added in 4.2. Answer based on conda 4.5.9]

Solution 2 - Python

Update

As of Jan 2017, it was not possible to add a channel to a single conda environment. As of Dec 2020, this is now possible as described in Christopher Barber's answer.


Alternative

If you instead want to install a package from a specific channel but do not want to add that channel to the global ~/.condarc file, you should use the option to install a package from a specific channel:

conda install <some-package> -c glotzer

Solution 3 - Python

You can create an environment.yml file containing the specification of your conda environment. The full docs are here, but the basic setup is as follows:

name: EnvironmentName
channels:
    - conda-forge
    - glotzer
dependencies:
    - pip:
        - tensorflow
    - pandas=0.22.*

To use the environment, type

conda env create -f environment.yml
conda activate EnvironmentName

To update the environment when environment.yml is changed or packages are updated,

conda env update -f environment.yml
conda activate EnvironmentName

Solution 4 - Python

You can create a new environment with a specific channel:

conda create -n EnvironmentName -c ChannelName

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSteven C. HowellView Question on Stackoverflow
Solution 1 - PythonChristopher BarberView Answer on Stackoverflow
Solution 2 - PythonSteven C. HowellView Answer on Stackoverflow
Solution 3 - PythonBallpointBenView Answer on Stackoverflow
Solution 4 - PythonTony ShouseView Answer on Stackoverflow