What Conda is
Conda is a cross-platform package and environment manager. It creates isolated environments and installs packages into them — but unlike Python-only tools, the packages it installs can be anything: compiled C and Fortran libraries, CUDA toolkits, GDAL, R itself, command-line bioinformatics tools, compilers.
That is the entire reason it exists and the entire reason scientific computing still runs on it. A great deal of research software is a thin Python wrapper around a C library, and installing the wrapper without the library is how a working morning becomes a lost afternoon. Conda ships the library. Everything else about it — the size, the historical slowness, the licensing confusion — is the price of that one capability, and in fields where the C library is unavoidable the price is worth paying.
Why researchers use it
- Binary dependencies without system-admin rights — CUDA, GDAL, PROJ, BLAS, and their transitive C dependencies installed into a user-writable environment.
- conda-forge — a community-maintained channel with nearly everything scientific, kept current, and the reason conda still works in practice.
- Multi-language environments — Python and R in the same environment, which matters more than it sounds when your pipeline crosses both.
environment.yml— a shareable specification that goes in your repository beside the code and, with discipline, rebuilds your environment elsewhere.- It is what your field already uses — in bioinformatics and geospatial work, the installation instructions you will be following assume conda.
Where it fits in a research workflow
Conda sits at the bottom of a scientific Python stack, below your analysis and beside your data. It is the layer that makes the imports work.
The division of labour with neighbouring tools is now fairly clear. For a pure-Python project, uv is faster, lighter, and produces a stricter lockfile — conda is overkill. For genuine archival reproducibility, an environment file is weaker than an image: the pattern in Anaconda to Apptainer builds the conda environment inside a container, which is the arrangement that actually survives to publication and beyond. On a cluster, that container is Apptainer; locally it is Docker. Conda is the environment definition; the container is the guarantee.
Getting started
Half an hour, and the first choice matters more than the rest.
- Install Miniforge, not the full Anaconda distribution. It defaults to conda-forge, avoids the commercial-channel licensing question entirely, and is a fraction of the size.
- Create environments per project, never install into
base:conda create -n project python=3.12 numpy, thenconda activate project. A polluted base environment is the most common self-inflicted conda injury. - Export with
conda env export --from-history > environment.ymland commit it. The--from-historyflag records what you asked for rather than every resolved dependency, which is what makes the file portable across platforms. - The step people skip: decide your pip policy before you need it. Mixing
pip installinto a conda environment works until it silently does not, and the recovery is usually to delete the environment. If you must, install everything conda can first, pip last, and never alternate.
Conda vs the alternatives
| Alternative | Does it better | Pick it if |
|---|---|---|
| uv | Speed, strict lockfiles, and a far simpler mental model | The project is pure Python |
| Docker | Capturing the OS and system libraries, not just packages | You need reproducibility that survives years |
| Apptainer | The same, on HPC where Docker is forbidden | Your work runs on a shared cluster |
| Google Colab | No environment management at all | You are teaching, or prototyping with a GPU |
Pick conda when non-Python binaries are in your stack. Pick uv when they are not. Pick a container when the answer needs to hold in three years.
Cost, licensing, and your data
Conda itself is open source and free. The licensing confusion — and it is real, and it has caught institutions — concerns Anaconda Inc.’s own package channels: the defaults channel and the Anaconda Distribution carry commercial terms that can require a paid licence for larger organisations. This is why the recommendation above is Miniforge, which points at community-run conda-forge and sidesteps the question entirely. If you are at a large institution and have been running the full Anaconda Distribution, this is worth checking with your research computing team rather than assuming.
There is no service and nothing to upload; environments live on your disk. The practical governance issue is size rather than privacy — conda environments run to gigabytes and multiply, so make sure they are not silently filling a backed-up home directory or a quota-limited cluster filesystem.
The honest review
Strengths. Conda solves a problem nothing else solves as conveniently: installing a working scientific stack, C libraries included, without root access. The conda-forge community has made it durable well past the point where the commercial parent’s direction became uncertain, and the mamba solver — now the default — removed the historic complaint about resolution taking coffee-break lengths of time.
Limitations. Environments are heavy, and the gigabytes accumulate faster than anyone expects. Reproducibility is weaker than it looks: environment.yml files without pinned builds resolve differently on different platforms and at different times, and --from-history exports depend entirely on your discipline about what you asked for. Mixing pip and conda in one environment is a documented way to break it. The licensing situation around Anaconda’s own channels is genuinely confusing and has produced real compliance problems. And for pure-Python work it is now clearly outclassed by uv on speed and simplicity.
Verdict. Adopt it when your stack includes non-Python binaries — GPU work, geospatial, bioinformatics, anything with a C library underneath. Skip it for pure-Python projects, where uv is better in every respect. The condition that flips the answer is what breaks when you try pip: if pip install gets you a working import, you do not need conda.
environment.yml as a reproducibility guarantee. Without pinned builds it resolves differently across platforms and over time, so the file that rebuilt your environment last year may quietly produce a different one today — and an unpinned environment plus a five-year-old paper is a reproducibility failure waiting to be discovered by someone else. For anything that must actually reproduce, build the conda environment inside a Docker or Apptainer image and archive the image.Common questions
Should I install Anaconda or Miniforge?
Miniforge, in almost every case. It defaults to the community conda-forge channel, avoids Anaconda Inc.’s commercial licensing questions, and installs a fraction of the size. The full Anaconda Distribution bundles hundreds of packages you will not use.
Is conda free?
The conda tool is open source and free. Anaconda Inc.’s own defaults channel and Distribution carry commercial terms that can require a paid licence for larger organisations — which is the reason to use Miniforge and conda-forge instead. If your institution runs the full Distribution at scale, check with research computing.
Can I use pip inside a conda environment?
Yes, but carefully. Install everything conda can provide first, then pip last, and avoid alternating between the two afterwards. Mixing them casually is the most common way conda environments end up in an unrecoverable state.