Conda

ID

conda

Home page

https://conda.org

Version requirement

>= 4.6

Platforms

🐧 Linux · 🍎 macOS · 🪟 Windows

Operations

installed · outdated · search · install · upgrade · upgrade_all · remove · cleanup

purl types

pkg:conda

CLI name

conda

Issues and PRs

📦 manager: conda

Source

meta_package_manager/managers/conda.py

Conda cross-language package and environment manager.

Reads go through conda’s --json mode: installed packages come from conda list --json and search from conda search "*query*" --json. conda has no dedicated outdated command, so the upgrade the solver would perform is simulated with conda update --all --dry-run --json and its UNLINK (current) and LINK (candidate) sets are diffed by name: a name in both is an in-place upgrade, while a LINK-only entry is a freshly pulled dependency and is not reported.

Note

Every operation targets conda’s currently active environment, which is base when none is activated. mpm neither activates nor switches environments: it inspects and mutates whatever environment conda resolves from the inherited CONDA_PREFIX / CONDA_DEFAULT_ENV, exactly as a bare conda call in the same shell would. Per-environment targeting is not supported yet.

Note

The >=4.6.0 floor is the release where update --dry-run --json settled on an actions mapping whose LINK / UNLINK values are package dicts, the shape the outdated diff parses. Much older conda wrapped actions in a list and emitted bare channel::name-version-build strings instead.

What mpm adds to conda

Through mpm, conda gains --exact and --extended search, to narrow to exact names or match descriptions.

Bigger still, mpm reaches across every manager at once: mpm installed and mpm outdated cover conda alongside every other manager you run in one table, mpm upgrade --all updates them together, and mpm sbom exports the whole machine as one bill of materials.

Every mpm command also gains --dry-run and --plan previews, cross-scheme version comparison and purl identifiers. See manager augmentations for how each one is built.

Your conda commands, in mpm

You already know conda: each operation maps one-to-one onto mpm, in an interface shared by every manager.

To…

With conda

With mpm

List what’s installed

conda list --json

mpm --conda installed

List outdated packages

conda update --all --dry-run --json

mpm --conda outdated

Search for a package

conda search "*pytz*" --json

mpm --conda search <pkg>

Install a package

conda install --yes pytz

mpm install pkg:conda/pytz

Upgrade one package

conda update --yes pytz

mpm --conda upgrade pytz

Upgrade everything

conda update --all --yes

mpm --conda upgrade --all

Remove a package

conda remove --yes pytz

mpm remove pkg:conda/pytz

Clear caches

conda clean --all --yes

mpm --conda cleanup --cache

Prefix any command above with --dry-run to simulate the underlying manager calls without touching the system: the safe way to watch what mpm would do before trusting it.

Operations

Operation

Supported

Notes

installed

outdated

orphans

search

exact and extended search backfilled by mpm

install

upgrade

upgrade_all

remove

sync

cleanup

doctor

Selecting and configuring conda

Deselect conda for a single run with --no-conda, or persist the choice in your configuration:

[mpm]
conda = false

Keep it enabled but tune how mpm drives it with a per-manager override:

[mpm.managers.conda]
timeout = 900

mpm config-template conda prints every overridable attribute as a ready-to-paste block.

Recipes

A few jobs you would otherwise script around conda, one mpm command each:

  • Snapshot and clone a machine: mpm --conda dump conda.toml, then mpm restore conda.toml on the next one.

  • Export a compliance SBOM: mpm --conda sbom (CycloneDX by default, --spdx for SPDX).

Privilege escalation

mpm runs this manager as the current user and never prepends sudo by default. Flip the policy for its privileged operations with --sudo or the per-manager sudo override.

See privilege escalation for the full policy.

Cooldown

State of Conda’s release-age gating, from the cooldown support table:

  • Status: 🚧 Proposed

  • Mechanism: --exclude-newer / exclude_newer (open issue + PR)

  • Reference: conda/conda#15759

A cooldown only pays off where a compromised release can be withdrawn while the clock runs, and can only be emulated where the registry dates its releases. From the retraction table:

  • Registry: anaconda.org / conda-forge (pkg:conda)

  • Retraction: Relabel: “we do not allow edits or the deletion of packages on conda-forge”; a bad artifact is labelled broken and “Users will no longer be able to install them by default” (procedure)

  • Publish date: ✅ upload_time, with the broken label carried in labels (API)

With --cooldown set, mpm skips this manager’s install and upgrade operations rather than run them unguarded (fail-closed); --allow-unsupported-managers opts back in.

Version probe

The version is probed by running:

$ conda --version
conda 24.5.0

and extracted with:

r"conda\s+(?P<version>\S+)"

Reference traces

Raw native outputs captured in the manager source: the reference mpm’s parsers were written against. If you know Conda well and a transcript below looks wrong, or a newer release changed its output format, report it.

$ conda list --json
[
  {
    "base_url": "https://repo.anaconda.com/pkgs/main",
    "build_number": 0,
    "build_string": "py312hca03da5_0",
    "channel": "pkgs/main",
    "dist_name": "pip-24.0-py312hca03da5_0",
    "name": "pip",
    "platform": "osx-arm64",
    "version": "24.0"
  },
  {
    "base_url": "https://repo.anaconda.com/pkgs/main",
    "build_number": 0,
    "build_string": "py312_0",
    "channel": "pkgs/main",
    "dist_name": "pytz-2024.1-py312_0",
    "name": "pytz",
    "platform": "osx-arm64",
    "version": "2024.1"
  }
]
$ conda update --all --dry-run --json
{
  "actions": {
    "FETCH": [],
    "LINK": [
      {
        "base_url": "https://repo.anaconda.com/pkgs/main",
        "build_number": 0,
        "build_string": "py312_0",
        "channel": "pkgs/main",
        "dist_name": "pytz-2024.2-py312_0",
        "name": "pytz",
        "platform": "osx-arm64",
        "version": "2024.2"
      }
    ],
    "UNLINK": [
      {
        "base_url": "https://repo.anaconda.com/pkgs/main",
        "build_number": 0,
        "build_string": "py312_0",
        "channel": "pkgs/main",
        "dist_name": "pytz-2024.1-py312_0",
        "name": "pytz",
        "platform": "osx-arm64",
        "version": "2024.1"
      }
    ],
    "PREFIX": "/opt/conda"
  },
  "dry_run": true,
  "prefix": "/opt/conda",
  "success": true
}
$ conda update --all --dry-run --json
{
  "message": "All requested packages already installed.",
  "success": true
}

Feed any of these through mpm and the raw output becomes one uniform table, the same shape for every manager: filter it, project columns, or export it (mpm --conda installed --output json, or csv, toml, yaml), each package carrying a purl and a version comparable across managers.

Changelog

  • 7.1.0 (2026-07-07)

    • Add Conda package manager with installed, outdated, search, install, upgrade, remove, and cleanup support, cross-platform on Linux, macOS, and Windows; requires conda >=4.6.0.