Use custom channels#
By default, conda-exec searches conda-forge for packages. You can specify
alternative or additional
conda channels
from the CLI or inside script metadata.
Specify a channel from the CLI#
Use -c or --channel to search a different channel:
conda exec -c bioconda samtools view input.bam
Use multiple channels#
Repeat -c to add multiple channels. They are searched in the order given,
subject to conda’s configured
channel priority:
conda exec -c bioconda -c defaults samtools view input.bam
Important
When you pass -c, the default conda-forge channel is not added
automatically. If your packages depend on conda-forge, you must include
it explicitly.
Include conda-forge alongside other channels when needed:
conda exec -c conda-forge -c bioconda samtools view input.bam
Bioinformatics example#
Many bioinformatics tools live in the bioconda channel and depend on
packages from conda-forge. Specify both:
conda exec -c conda-forge -c bioconda minimap2 -a ref.fa reads.fq > out.sam
Declare channels in script metadata#
For Python scripts with PEP 723
inline metadata, declare channels in the [tool.conda] table:
# /// script
# [tool.conda]
# channels = ["conda-forge", "bioconda"]
# dependencies = ["samtools>=1.19", "pysam"]
# ///
import pysam
print(pysam.__version__)
conda exec script.py
Combine script channels with CLI channels#
Tip
Channels are searched in order. Channels declared in script metadata come first, followed by any CLI channels. Put your preferred channel first to give it higher priority.
CLI channels (-c) are appended after channels declared in script metadata.
Given a script that declares channels = ["conda-forge"], running:
conda exec -c bioconda script.py
resolves packages using ["conda-forge", "bioconda"] in that order.
If neither the script metadata nor the CLI provides channels, conda-forge
is used as the default.
How channels affect caching#
Different channel combinations produce different cache keys. Running the
same tool with different -c flags creates separate cached environments:
conda exec ruff check . # cached as ruff--<hash1>
conda exec -c defaults ruff check . # cached as ruff--<hash2>
The cache key treats channel order as the same channel set. On a cache miss,
the order you pass is used for the solve. If you change only the order of
the same channels and need conda to solve again with that order, use
--refresh.