61

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.

Steven C. Howell
  • 16,902
  • 15
  • 72
  • 97
  • 1
    My experience has been that this is not possible (yet). What I do in these situations is remember to specify the channel to all install/update commands, for instance `conda update -c conda-forge --all` works well. Beware though that all the possible packages will be installed from `conda-forge` then. – darthbith Nov 15 '16 at 23:15

4 Answers4

83

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]

Christopher Barber
  • 2,548
  • 1
  • 22
  • 23
11

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
Steven C. Howell
  • 16,902
  • 15
  • 72
  • 97
8

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
BallpointBen
  • 9,406
  • 1
  • 32
  • 62
  • 3
    This doesn't answer the question. Furthermore the channels in the `environment.yml` file are only used to create the environment and do not get added to the default configuration of the environment (i.e. no `.condarc` file is created for the environment containing its channels), so installing additional packages will require manually specifying the channels on the command line. – Christopher Barber Aug 11 '18 at 20:33
  • 3
    I only ever create environments using an `environment.yml` file, and in a non-default environment, I never use `conda install` — I always update the environment file, then `conda --env update`. This way the environment file always represents the current state of the environment, which makes my environments 100% portable — the file contains all the info needed to recreate them. – BallpointBen Aug 11 '18 at 20:37
  • 1
    Yeah it is good practice, but Steven wants to add a channel to an existing environment. At least the question implies that. – niid Nov 29 '19 at 09:48
4

You can create a new environment with a specific channel:

conda create -n EnvironmentName -c ChannelName

Tony Shouse
  • 106
  • 5