A system-level, binary package and environment manager running on all major operating systems and platforms.
Full Changelog: https://github.com/conda/conda/compare/24.3.0...24.4.0
repodata.json
raises
JSONDecodeError
. (#11804)conda.gateways.subprocess.subprocess_call
to use text=True
to avoid manual encoding/decoding. (#13240)conda activate
. (#13567 via #13568)conda env export
to conda export
and alias the old command to the new command. (#13577)conda install --revision <idx>
. (#13611)conda.testing.tmp_channel
pytest fixture to create a temporary local channel for testing. (#13634)KeyboardInterrupt
instead of raising another AttributeError
exception, when conda debugging logs are enabled. (#13531)str
instead of raising an exception. (#13543)zstandard
for use when downloading repodata.json.zst
. (#13551)repodata.json
if repodata.json.zst
cannot be decompressed as zstandard
. (#13558)conda rename
command no longer throws an error when conda is not active. (#13565)repodata.json
from repodata.json.zst
on most 4xx error codes. (#13573)--subdir
and --platform
flags to be available for conda env create
command. (#13632)__archspec
virtual package on Windows to return microarchitecture instead of the default x86_64
. (#13641)Content-Length
is nonzero before calculating progress, avoiding a possible ZeroDivisionError
. (#13653, #13671)conda.common.compat.encode_arguments
as pending deprecation. (#13240)conda.export.handle_proxy_407
. (#13629)conda.testing.integration.make_temp_channel
as pending deprecation. Use conda.testing.tmp_channel
fixture instead. (#13634)conda.testing.integration.running_a_python_capable_of_unicode_subprocessing
as pending deprecation. (#13634)conda.testing.integration.set_tmpdir
as pending deprecation. Use tmp_path
, conda.testing.path_factory
, or conda.testing.tmp_env
instead. (#13634)conda.testing.integration._get_temp_prefix
as pending deprecation. Use tmp_path
, conda.testing.path_factory
, or conda.testing.tmp_env
instead. (#13634)conda.testing.integration.make_temp_prefix
as pending deprecation. Use tmp_path
, conda.testing.path_factory
, or conda.testing.tmp_env
instead. (#13634)conda.testing.integration.FORCE_temp_prefix
as pending deprecation. Use tmp_path
, conda.testing.path_factory
, or conda.testing.tmp_env
instead. (#13634)conda.testing.integration.create_temp_location
as pending deprecation. Use tmp_path
or conda.testing.path_factory
instead. (#13634)conda.testing.integration.tempdir
as pending deprecation. Use tmp_path
or conda.testing.path_factory
instead. (#13634)conda.testing.integration.reload_config
as pending deprecation. Use conda.base.context.reset_context
instead. (#13634)conda.base.context.Context.conda_exe
deprecation to conda 24.9
. (#13634)conda.testing.integration.run_command
deprecation to conda 25.3
. (#13634)conda 25.3
. (#13634)conda._vendor.boltons
. Use boltons
package instead. (#12681 via #13634)conda.auxlib.packaging
. Use a modern build system instead; see https://packaging.python.org/en/latest/tutorials/packaging-projects#creating-pyproject-toml for more details. (#12681 via #13634)conda env create --force
. Use conda env create --yes
instead. (#12681 via #13634)conda info PACKAGE
. Use conda search PACKAGE --info
instead. (#12681 via #13634)conda.core.subdir_data.fetch_repodata_remote_request
. Use conda.core.subdir_data.SubdirData.repo_fetch.fetch_latest_parsed
instead." (#12681 via #13634)conda.exports.memoized
. Use functools.lru_cache
instead. (#12681 via #13634)conda.gateways.disk.read._digest_path
. Use conda.gateways.disk.read.compute_sum
instead. (#12681 via #13634)conda.gateways.disk.read.compute_md5sum
. Use conda.gateways.disk.read.compute_sum(path, "md5")
instead. (#12681 via #13634)conda.gateways.disk.read.compute_sha256sum
. Use conda.gateways.disk.read.compute_sum(path, "sha256")
instead. (#12681 via #13634)conda.instructions.PREFIX
. (#12681 via #13634)conda.instructions.PREFIX_CMD
. (#12681 via #13634)conda.testing.encode_for_env_var
. (#12681 via #13634)conda.testing.conda_check_versions_aligned
. (#12681 via #13634)conda.testing.helpers.run_inprocess_conda_command
. Use conda.testing.tmp_env
instead. (#12681 via #13634)conda.testing.helpers.capture_json_with_argv
. (#12681 via #13634)conda.testing.integration.get_conda_list_tuple
. Use conda.core.prefix_data.PrefixData.get
instead. (#12681 via #13634)conda.utils.md5_file
. Use conda.gateways.disk.read.compute_sum(path, "md5")
instead. (#12681 via #13634)conda.utils.hashsum_file
. Use conda.gateways.disk.read.compute_sum
instead. (#12681 via #13634)conda.utils.safe_open
. Use open
instead. (#12681 via #13634)python -m conda_env
. Use conda env
or python -m conda env
instead. (#12681 via #13634)conda_env.env.load_from_directory
. (#12681 via #13634)conda_env.pip_util.get_pip_version
. (#12681 via #13634)conda_env.pip_util.PipPackage
. (#12681 via #13634)conda_env.pip_util.installed
. (#12681 via #13634)conda_env.pip_util._canonicalize_name
. (#12681 via #13634)conda_env.pip_util.add_pip_installed
. (#12681 via #13634)dev/*
scripts in favor of conda-incubator/setup-miniconda
GitHub Action in .github/workflows/tests.yml
. (#13162).github/workflows/tests.yml
. (#12418 via #13162)osx-arm64
(aka Apple Silicon) runners. Enable osx-arm64
canary builds. Fix or disable broken tests. (#13617)Full Changelog: https://github.com/conda/conda/compare/24.1.2...24.3.0
fetch_repodata_remote_request
when repodata_use_zst
is enabled. (#13595)Full Changelog: https://github.com/conda/conda/compare/24.1.1...24.1.2
repodata.json
if repodata.json.zst
cannot be decompressed as zstandard. (#13558)repodata.json
from repodata.json.zst
on most 4xx error codes. (#13573)Full Changelog: https://github.com/conda/conda/compare/24.1.0...24.1.1
conda_env.*
modules have been merged into the conda
package!To improve the integration of the conda env
subcommand (previously standalone), we've moved its code into the conda
package, while allowing old conda env
commands to still work via Python import redirects. This is a first step of many to improving the user experience of the conda command line interface related to environment management. (#13168)
pre-solves
and post-solves
plugin hooks. (#13053)repodata.json.zst
for faster repodata downloads. (#13256)--skip-flexible-search
option in conda search
to skip flexible search. (#13315)--keep-env
to be used with conda remove --all
. It allows users to delete all packages in the environment while retaining the environment itself. (#13419)conda env remove
and conda remove --all
deletes not only the conda packages but the entirety of the specified environment. (#13440)--repodata-use-zst/--no-repodata-use-zst
flag to control repodata.json.zst
check; corresponding repodata_use_zst: true/false
for .condarc
. Default is to check for repodata.json.zst
. Disable if remote returns unparseable repodata.json.zst
instead of correct data or 404. (#13504)~/.conda
directory before trying to write to the environments.txt
file. (#13338)PackageRecord.timestamp
is dumped in milliseconds. (#13483)CONDA_REPODATA_FNS
. (#13490)platformdirs
library was adopted. (#13517 via #13520)Cache-Control
header as max-age=0
instead of exception. (#13522)conda_env/cli/common
as pending deprecation. Use conda.cli.common
instead. (#13168)conda_env/cli/main_config
as pending deprecation. Use conda.cli.main_env_config
instead. (#13168)conda_env/cli/main_create
as pending deprecation. Use conda.cli.main_env_create
instead. (#13168)conda_env/cli/main_export
as pending deprecation. Use conda.cli.main_env_export
instead. (#13168)conda_env/cli/main_list
as pending deprecation. Use conda.cli.main_env_list
instead. (#13168)conda_env/cli/main_remove
as pending deprecation. Use conda.cli.main_env_remove
instead. (#13168)conda_env/cli/main_update
as pending deprecation. Use conda.cli.main_env_update
instead. (#13168)conda_env/cli/main_vars
as pending deprecation. Use conda.cli.main_env_vars
instead. (#13168)conda_env/env
as pending deprecation. Use conda.env.env
instead. (#13168)conda_env/installers/base
as pending deprecation. Use conda.env.installers.base
instead. (#13168)conda_env/installers/conda
as pending deprecation. Use conda.env.installers.conda
instead. (#13168)conda_env/installers/pip
as pending deprecation. Use conda.env.installers.pip
instead. (#13168)conda_env/pip_util
as pending deprecation. Use conda.env.pip_util
instead. (#13168)conda_env/specs
as pending deprecation. Use conda.env.specs
instead. (#13168)conda_env/specs/binstar
as pending deprecation. Use conda.env.specs.binstar
instead. (#13168)conda_env/specs/requirements
as pending deprecation. Use conda.env.specs.requirements
instead. (#13168)conda_env/specs/yaml_file
as pending deprecation. Use conda.env.specs.yaml_file
instead. (#13168)conda.testing.integration.make_temp_package_cache
as pending deprecation. (#13511)conda.cli.main_info
. (#13445)conda.cli.main_search
. (#13465)VersionOrder
class. (#13380)pyupgrade
via ruff
. (#13272, #13433)tmp_pkgs_dir
fixture to replace make_temp_package_cache
. (#13511)Full Changelog: https://github.com/conda/conda/compare/23.11.0...24.1.0
New menuinst
v2 support!
conda
has supported Start menu items on Windows for a long time. This is what allows users to open up their Miniconda prompt on CMD (Command Prompt) with an initialized conda
session. This menu item (or shortcut) creation logic is provided by the menuinst
package.
With the release of 23.11.0, conda
now supports menuinst
v2, which enables the same experience across Windows, Linux, and macOS. This means package builders will be able to provide desktop icons across all operating systems, which can be especially useful for GUI applications. See the documentation for more details.
If you don't want conda
to create shortcuts, you can disable it via:
shortcuts: false
entry in your .condarc
configurationCONDA_SHORTCUTS=false
environment variable--no-shortcuts
command-line flagmenuinst
v2, enabling shortcuts across all platforms (Windows, Linux, macOS) using a new JSON schema (see CEP-11). Retain support for old v1-style JSON menus. (#11882)chardet
package by requests
/pip
; explicitly depend on charset_normalizer
. (#13171)CondaHealthCheck
, as part of conda doctor
. (#13186)activate
and deactivate
in the --help
command list. (#13191)conda info
output for debugging purposes. (#13265)__conda
virtual package. (#13266)appdirs
to platformdirs
. (#13306)info
level, occurring when the remote file has rolled over. (#12913)--debug
are used without specifying a command. (#13232)CONDA_FETCH_THREADS
/fetch_threads
to set parallel package downloads beyond the default 5
. (#13263)requests >=2.28
for enhanced response.json()
exception handling. (#13346)callback=reset_context
in conda.plan
to resolve conda-build
+ conda-libmamba-solver
incompatibilities. (conda-libmamba-solver#393 and conda-libmamba-solver#386 via #13357)conda.plugins.subcommands.doctor.health_checks.display_health_checks
function. (#13186)conda.plugins.subcommands.doctor.health_checks.display_report_heading
function. (#13186)ruamel_yaml
fallback; use ruamel.yaml
exclusively. (#13218)conda.gateways.anaconda_client.EnvAppDirs
in favor of platformdirs
. (#13306)conda._vendor.cpuinfo
for pending deprecation. (#13313)conda._vendor.distro
in favor of the distro
package. (#13317)conda-sphinx-theme
to the conda documentation. (#13298)conda
in the main README.md
. (#13343)conda.cli.main_*
, and separate argparse configuration functions from conda.cli.conda_argparse
to their respective conda.cli.main_*
modules. (#13173)argparse.Actions
to conda.cli.actions
(e.g., NullCountAction
), and relocate helper argparse functions to conda.cli.helpers
(e.g., add_parser_prefix
). (#13173)ruamel.yaml
to <0.19
following the release of 0.18
. (#13258)black
with ruff format
in pre-commit. (#13272)Full Changelog: https://github.com/conda/conda/compare/23.10.0...23.11.0
conda-libmamba-solver
! 🥳 🚀The previously "classic" solver is based on pycosat/Picosat and will remain part of conda for the foreseeable future, a fallback is possible and available.
In short: to make conda faster and more accurate.
A "solver" is the core component of most package managers; it calculates which dependencies (and which version of those dependencies) to install when a user requests to install a package from a package repository. To address growth-related challenges within the conda ecosystem, the conda maintainers, alongside partners Anaconda, Quansight and QuantStack, introduced a new conda dependency solver based on the Mamba project in December 2022.
Since July 2023, the conda-libmamba-solver
plugin has been included in all major conda ecosystem installers (miniforge, miniconda, mambaforge and Anaconda Distribution), but was disabled by default. As soon as these installers are updated to contain conda 23.10.0 or later, they will automatically default to using the conda-libmamba-solver plugin.
If the new solver is not working as you expect:
classic
solver without modifying your conda installation:
--solver=classic
to your conda
calls.conda build ...
or constructor ...
), set the environment variable CONDA_SOLVER=classic
.conda config --set solver classic
.The documentation of the conda-libmamba-solver
plugin can be found on conda.github.io/conda-libmamba-solver.
For more information about the conda-libmamba-solver
rollout plan, please also see our blog post from earlier this year.
--platform
and --subdir
flags to create environments for non-native platforms, remembering that choice in future operations. (#11505 via #11794)solver: libmamba
as the new default solver. (#12984)condarc
, .condarc
, or *.yml/yaml
). (#12956)conda doctor
ignore blank lines in ~/.conda/environments.txt
. (#12984)conda.cli.main.generate_parser
as pending deprecation. Use conda.cli.conda_argparse.generate_parser
instead. (#13144)conda.auxlib.collection.firstitem
as pending deprecation. (#13144)conda.auxlib.collection.call_each
as pending deprecation. (#13144)conda.auxlib.compat.NoneType
as pending deprecation. (#13144)conda.auxlib.compat.primative_types
as pending deprecation. (#13144)conda.auxlib.compat.utf8_writer
as pending deprecation. (#13144)conda.auxlib.exceptions.AuthenticationError
as pending deprecation. (#13144)conda.auxlib.exceptions.NotFoundError
as pending deprecation. (#13144)conda.auxlib.exceptions.InitializationError
as pending deprecation. (#13144)conda.auxlib.exceptions.SenderError
as pending deprecation. (#13144)conda.auxlib.exceptions.AssignmentError
as pending deprecation. (#13144)conda.auxlib.type_coercion.boolify_truthy_string_ok
as pending deprecation. (#13144)conda.auxlib.type_coercion.listify
as pending deprecation. (#13144)conda.models.dist.IndexRecord
as pending deprecation for removal in 24.9. (#13193)conda.exports.fetch_index
as pending deprecation for removal in 24.9. Use conda.core.index.fetch_index
instead. (#13194)>=3.27
. (#13177)This is an announcement about an important and positive future change in conda's functionality:
We will change the default solver of conda to conda-libmamba-solver
in a special 23.10.0 release in the near future!
You can already benefit from it today by configuring your conda installation to use it (e.g. by running conda config --set solver libmamba
).
The current "classic" solver is based on pycosat/Picosat and will remain part of conda for the forseeable future, a fallback is possible and available (see below).
Here is our updated plan to change the default solver, to better follow CEP 8 and reduce the potential impact on conda users:
libmamba
.libmamba
solver and use the classic
solver instead, by using one of these options:
--solver=classic
command line option,CONDA_SOLVER=classic
environment variable orconda config --set solver classic
.conda-libmamba-solver
plugin happens in the conda-libmamba-solver repo, including issue tracking.conda-libmamba-solver
plugin can be found on conda.github.io/conda-libmamba-solver.For more information about the conda-libmamba-solver
rollout plan, please also see our blog post from earlier this year.
A "solver" is the core component of most package managers; it calculates which dependencies (and which version of those dependencies) to install when a user requests to install a package from a package repository. To address growth-related challenges within the conda ecosystem, the conda maintainers, alongside partners Anaconda, Quansight and QuantStack, introduced a new conda dependency solver based on the Mamba project in December 2022.
Since July 2023, that conda-libmamba-solver
plugin has been included in and automatically installed with all major conda ecosystem installers (miniforge, miniconda, mambaforge and Anaconda Distribution), with the default solver configuration unchanged.
fish
shell initialization. (#12811)--no-lock
option in case of problems, should not be necessary. Older --experimental=lock
no longer has an effect. (#12920)context.register_envs
option to control whether to register environments in ~/.conda/environments.txt
when they are created. Defaults to true. (#12924)-vv
is now -vvv
). (#12985, #12977, #12420, #13036)truststore
to the ssl_verify
config option, enabling conda to use the operating system certificate store (requires Python 3.10 or later). (#13075 and #13149)emscripten-wasm32
and wasi-wasm32
platforms to known platforms. (#13095)py.typed
marker file to the conda
package for compliance with PEP-561. (#13107)boto3
only when S3 channels are used, saving startup time. (#12914)conda env create
, check the directory permissions before writing to disk. (#11610)InsecureRequestWarning
for JLAP when CONDA_SSL_VERIFY=false
, matching non-JLAP behavior. (#12731)AttributeError
logging response with nonexistent request when using JLAP with file:///
URIs. (#12966)--json
and --debug
to NULL
so as to not override CONDA_JSON
and CONDA_DEBUG
environment variables. (#12987)XonshActivator
now uses source-bash
in non-interactive mode to avoid side-effects from interactively loaded RC files. (#13012)conda remove --all --json
output. (#13019)conda info
) on WSL. (#13035)JSONDecodeError
on repodata.info.json
as a warning, equivalent to a missing repodata.info.json
. (#13056)conda config --show-sources --json
. (#13076)OSError
in find_commands
to account for incorrect PATH
entries on Windows. (#13125)NotWritableError
when trying to find the first writable package cache dir. (#9609)conda env update --prune
uses only the specs coming from environment.yml
file and ignores the history specs. (#9614)conda.another_unicode()
. (#12948)conda._vendor.toolz
. (#12948, #13141)conda._vendor.tqdm
. (#12948)conda.auxlib.decorators.memoized
decorator. (#12948)conda.base.context.Context.experimental_solver
. (#12948)conda.base.context.Context.conda_private
. (#12948)conda.base.context.Context.cuda_version
. (#12948)conda.base.context.get_prefix()
. (#12948)conda.cli.common.ensure_name_or_prefix()
. (#12948)--experimental-solver
command line option. (#12948)conda.common.cuda
module. (#12948)conda.common.path.explode_directories(already_split)
. (#12948)conda.common.url.escape_channel_url()
. (#12948)conda.core.index.check_whitelist()
. (#12948)conda.core.solve._get_solver_class()
. (#12948)conda.core.subdir_data.read_mod_and_etag()
. (#12948)conda.gateways.repodata.RepodataState.load()
. (#12948)conda.gateways.repodata.RepodataState.save()
. (#12948)conda.lock
module. (#12948)conda_env.cli.common.stdout_json()
. (#12948)conda_env.cli.common.get_prefix()
. (#12948)conda_env.cli.common.find_prefix_name()
. (#12948)boto3
for S3 support and drop support for the older boto
as it doesn't support our minimum required version of Python. (#13112)sys._getframe()
instead of inspect.stack()
. (#12919)cache_path
arguments from RepoInterface
/JlapRepoInterface
; replaced by cache object. (#12927)Full Changelog: https://github.com/conda/conda/compare/23.7.4...23.9.0
os.scandir()
to find conda subcommands without stat()
overhead. (#13033, #13067)conda info
) on WSL. (#13035)PermissionError
raised by conda.cli.find_commands.find_commands
when user's $PATH
contains restricted paths. (#13062, #13089)conda config --show-sources --json
. (#13076)Full Changelog: https://github.com/conda/conda/compare/23.7.2...23.7.3