Releases · conda/conda
26.1.1
Bug fixes
- Fix
conda doctor --fixfailing withinstall() missing 1 required positional argument: 'parser'when attempting to fix packages with missing files. (#15669)
Contributors
Full Changelog: 26.1.0...26.1.1
26.1.0
Enhancements
- Allow
custom_multichannels.defaultsto overridedefault_channels. Continuation of effort to devendor conda and remove hardcoded "defaults" channel. (#14661) - Defer
PrefixDatarecord instantiation until they are accessed for faster query performance. (#14811) - Add support for Python 3.14. (#15080, #15618)
- Speed up the context initialization process by caching condarc file reads. (#15150)
- Raise a
NoChannelsConfiguredErrorwhen attempting to solve an environment with no channels configured, and provide a helpful message to guide users in adding channels. (#15262 via #15345) - Add
conda.cli.condarc.ConfigurationFileclass to expose configuration file manipulation interface programmatically. This allows other Python interfaces to read and modify conda configuration files without shelling out toconda configcommands. (#15238 via #15376) - Add
-sas a shorthand alias forconda run --no-capture-output. (#15426) conda runnow deactivates the environment on exiting the command. (#15427)- Rename
conda.models.enums.PathTypeenum toconda.models.enums.PathEnumto resolve a naming conflict with thePathTypetype annotation. This change follows modern Python conventions and establishes the*Enumsuffix as the pattern for enums in the codebase. (#15428) - Validate plugin-provided HTTP headers and raise
PluginErrorif forbidden headers are detected, preventing plugins from compromising conda's network stack. (#15405 via #15436) - Add
conda_package_extractorsplugin hook to allow plugins to register custom package archive extractors. (#15524 via #15441) - Add
-Oas a flag alias for--override-channels. (#15499) - Add reusable
http_test_serverfixture toconda.testingmodule for serving mock conda channels and remote files in tests. Fixture uses standard@pytest.mark.parametrize()withindirect=Truefor configuring directories, supporting both pre-existing directories and dynamic content generation. Provides clean API withget_url()helper method anddirectoryattribute. (#15528 via #15529) - Speed up
conda runby inlining environment activation instead of using a subprocess. (#15534) - Add a
--sizeflag to theconda info --envsandconda env listcommands to display disk usage for each environment. (#8040 and #15544) - Add
PrefixRecord.package_size()andPrefixData.sizefor programmatic access to conda-managed disk usage. (#15544) - Add
--sizeflag toconda listto show environment size and package sizes. (#15544) - Improve error messages for HTTP 403 (Forbidden) responses with context-aware guidance on authentication and permissions. (#15594)
- Improve error message when
conda activatefails on Windows due to unwritable%TEMP%directory. (#15601 via #15602) - Package extension detection is now dynamic based on registered
conda_package_extractorsplugins. (#15629) - Allow
conda create --download-onlyto run without specifying-n/--nameor-p/--prefix, similar to--dry-run. (#15633) - Add
--fixflag toconda doctorwith health check fix capabilities. (#15530) - Improve error message when
conda env exportis invoked with an invalid platform. (#15561)
Bug fixes
- Stop
conda runfrom adding an additional new line after printing tostdoutorstderr. (#11763 via #15539) - Non-conda installed Python packages now show up in
conda listin free-threading environments. (#14674) - Fix Python packages not being listed as from the
pypichannel if thesite-packagesdirectory includes a symlink. (#14674) - Replace deprecated
codecs.open()with built-inopen()for Python 3.14 compatibility. (#15080) - Fix parallel conda command failures on Windows (e.g.,
start /b) by using GUIDs for unique temp filenames instead of%RANDOM%. (#15169 via #15598) - Sanitize channel config input to remove null values. (#15268 via #15323)
- Fix
conda list --fields dist_strrepresentation. (#15420) - Add the
--separator such thatconda runcan properly separate executable options from conda options when invoking commands. Now, executable options are correctly parsed and handled. (#15432) - Raise an error when no command is provided to
conda run, instead of proceeding with an empty command. (#15437) - Do not expose
__cudavirtual package when no CUDA version was detected. (#15500) - Ensure an appropriate error code is returned when
conda runis invoked with an invalid environment name or prefix. (#15534) - Record
size_in_bytesfor generated entry points and compiled.pycfiles in the prefix manifests. (#15544) - Allow
conda env updateto execute an update on an environment for environment files that do not have conda dependencies. (#15569 via #15570) - Terminate activation early on Windows when activation scripts fail. (#15616)
- Fix package installation from repodata v3 channels by extracting the correct filename from the URL instead of using the repodata key. This resolves issues when installing packages where the repodata key differs from the actual filename (e.g., wheel packages where the key uses underscores but the filename uses hyphens). (#15620 via #15626)
- Fix incorrect source location in deprecation warnings when multiple constants are deprecated in the same module. (#15623 via #15624)
- Fix
conda clean --tarballsnot cleaning up.partialdownload files. (#15634 via #15635) - Decode SHA256 fields in Python's
RECORDmetadata files. (#15591) - Fix
CondaJSONEncoderto support serializingfrozendicts. (#15532) - Fix argument parser aliases incorrectly defined as a string instead of a tuple. (#15418)
- Raise an error when attempting to deactivate an environment that is not currently active. (#15609)
Deprecations
- Mark
conda.exception_handler.ExceptionHandler._uploadas pending deprecation, to be removed in 27.3. (#13900 via #14698) - Mark
conda.exception_handler.ExceptionHandler._ask_uploadas pending deprecation, to be removed in 27.3. (#13900 via #14698) - Mark
conda.exception_handler.ExceptionHandler._execute_uploadas pending deprecation, to be removed in 27.3. (#13900 via #14698) - Mark
conda.exception_handler.ExceptionHandler._post_uploadas pending deprecation, to be removed in 27.3. (#13900 via #14698) - Mark private helper functions in
conda.cli.main_config(_key_exists,_get_key,_set_key,_remove_item,_remove_key,_read_rc,_write_rc,_validate_provided_parameters) as pending deprecation, to be removed in 27.3. Use the newConfigurationFileclass instead. (#15376) - Mark
conda.models.enums.PathTypeas pending deprecation, to be removed in 27.3. Useconda.models.enums.PathEnuminstead. (#15428) - Mark
conda.utils.massage_argumentsas pending deprecation, to be removed in 27.3. (#15439) - Mark
conda.gateways.disk.create.extract_tarballas pending deprecation, to be removed in 27.3. Useconda.base.context.context.plugin_manager.extract_packageinstead. (#15524 via #15441) - Mark the
use_system_tmp_pathargument ofconda.utils.wrap_subprocess_call(use_system_tmp_path=...)as pending deprecation, to be removed in 27.3. Use the TMPDIR, TEMP, or TMP environment variables to set the system temporary directory location. (#15440 via #15442) - Mark private helper functions in
conda.common.serializers(_yaml_round_trip,_yaml_safe) as pending deprecation, to be removed in 27.3. Useconda.common.serialize.yaml._yaml()instead. (#15503) - Mark
conda.common.serializers.yaml_round_trip_loadandconda.common.serializers.yaml_safe_loadas pending deprecation, to be removed in 27.3. Useconda.common.serialize.yaml.load()instead. (#15503) - Mark
conda.common.serializers.yaml_round_trip_dumpandconda.common.serializers.yaml_safe_dumpas pending deprecation, to be removed in 27.3. Useconda.common.serialize.yaml.dump()instead. (#15503) - Mark
conda.cli.actions.NullCountAction._ensure_valueas pending deprecation, to be removed in 27.3. (#15512) - Mark
conda.exports.inputas pending deprecation, to be removed in 27.3. Usebuiltins.inputinstead. (#15523 via #15526) - Mark
conda.exports.StringIOas pending deprecation, to be removed in 27.3. Useio.StringIOinstead. (#15523 via #15526) - Mark
conda.exports.PY3as pending deprecation, to be removed in 27.3. Python 2 is no longer supported. (#15523 via #15526) - Mark
conda.exports.string_typesas pending deprecation, to be removed in 27.3. Usestrinstead. (#15523 via #15526) - Mark
conda.exports.text_typeas pending deprecation, to be removed in 27.3. Usestrinstead. (#15523 via #15526) - Mark
conda.exports.DEFAULT_CHANNELSas pending deprecation, to be removed in 27.3. Useconda.base.constants.DEFAULT_CHANNELSinstead. (#15523 via #15526) - Mark
conda.exports.DEFAULT_CHANNELS_UNIXas pending deprecation, to be removed in 27.3. Useconda.base.constants.DEFAULT_CHANNELS_UNIXinstead. (#15523 via #15526) - Mark
conda.exports.DEFAULT_CHANNELS_WINas pending deprecation, to be removed in 27.3. Useconda.base.constants.DEFAULT_CHANNELS_WINinstead. (#15523 via #15526) - Mark
conda.exports.PREFIX_PLACEHOLDERas pending deprecation, to be removed in 27.3. Useconda.base.constants.PREFIX_PLACEHOLDERinstead. (#15523 via #15526) - Mark
conda.exports._PREFIX_PLACEHOLDERas pending deprecation, to be removed in 27.3. Useconda.base.constants.PREFIX_PLACEHOLDERinstead. (#15523 via #15526) - Mark
conda.exports.prefix_placeholderas pending deprecation, to be removed in 27.3. Useconda.base.constants.PREFIX_PLACEHOLDERinstead. (#15523 via #15526) - Mark
conda.exports.CondaErroras pending deprecation, to be removed in 27.3. Useconda.CondaErrorinstead. (#15523 via #15526) - Mark
conda.exports.CondaHTTPErroras pending deprecation, to be removed in 27.3. Useconda.exceptions.CondaHTTPErrorinstead. (#15523 via #15526) - Mark
conda.exports.CondaOSErroras pending depr...
25.11.1
25.11.0
Enhancements
- Add three new fields to
conda.plugins.types.CondaVirtualPackageclass:override_entity: Control which field (version or build number) can be overriddenempty_override: Specify behavior when override value is emptyversion_validation: Validate override version values
These fields abstract and generalize the version/build number override logic into theCondaVirtualPackagesclass, removing the need for individual virtual packages to implement their own override handling. (#15248)
- Add a new
override_virtual_packages(with aliasvirtual_packages) key tocondarc. (#15156 via #15318) - Add
.createdand.last_modifiedproperties toPrefixData, which provide information about the creation and last modification times of a given environment, respectively. (#14308 via #15329) - Add a new
envs_detailsfield to theconda info --jsonoutput to inspect properties of the registered environments. This is also part of theconda info --envs --jsonandconda env list --jsonoutputs. (#15330) conda.plugins.reporter_backends.JSONReporterRenderer.envs_listnow allowsdict[str, dict[str, str | bool]], which is passed directly to the JSON dumper. (#15330)
Bug fixes
- Ensure
MatchSpecserialization does not contain orphan=separator when theversionfield is set to*. (#14357 via #15294) - Require
conda-libmamba-solver >=25.4.0. (#15289) - Fix
Channel.urls()to respect explicitsubdirsparameter when the channel has a platform defined. (#14258) - Include
platforminChannelequality and hash checks. (#14259 via #15296) - Fix where
conda search --json --use-index-cache <package>could fail to encode message as json, when cache is empty. (#15308) - Adjust whitespace in
conda info --envsheader. (#15330) - Fix plugin settings YAML serialization to use valid nested YAML format for plugin settings in
conda config --describeoutput. (#15339 via #15341) - Fix several bugs related to Python 3.14 compatibility. (#15079, #15088 via #15340)
- Ignore and warn user if the
PATHenvironment variable is set in the environment config. Conda should not enable modifying thePATHto any arbitrary value. (#15342) - Restrict the JSON output to only the
envslist whenconda info --envs --jsonandconda env list --jsonare called. (#15353) - Produce a warning when a user tries to add a
PATHenvironment variable to their environment configuration. Adding reserved env vars likePATHto the environment variables config for an environment may produce unexpected results in conda. (#15292 via #15354) - Fix zsh parse error on Windows. (#13915, #9922 via #15335)
- Remove
returnfromtry-finallyper PEP-765. (#15370 via #15371)
Deprecations
- Mark
conda.plugins.hookspec.spec_nameas pending deprecation, to be removed in 26.9. Useconda.base.constants.APP_NAMEinstead. (#15255) - Mark
conda.cli.main_compare.get_packagesas pending deprecation, to be removed in 26.9. Useconda.core.prefix_data.PrefixData.map_recordsinstead. (#15387)
Docs
- Expand contributor documentation. (#15208)
- Reference
conda.plugins.types.*instead of re-exports fromconda.plugins. (#15307) - Use
--namemore consistently in getting started docs. (#15346)
Other
- Reduce warnings in tests. (#15307)
- Performance improvements for the
conda env listcommand, which now defers retrieving environment information until necessary. (#15320) - Stop using assertions in non-testing code, and enable the corresponding linting rules. (#15357 via #15361)
Contributors
- @agriyakhetarpal
- @conda-bot
- @danyeaw made their first contribution in #15208
- @dholth
- @jaimergp
- @jezdez
- @jakirkham
- @kathatherine
- @kenodegard
- @ForgottenProgramme
- @lang-m made their first contribution in #13165
- @ryanskeith
- @hoxbro made their first contribution in #15325
- @soapy1
- @sumanth-manchala made their first contribution in #14179
- @travishathaway
- @dependabot[bot]
- @pre-commit-ci[bot]
25.9.1
25.9.0
✨ Special Announcement ✨
Following feedback from conda users last year about the pre-configuration of the conda code base to favor channels from Anaconda Inc, we've finished removing hardcoding Anaconda's channels as the default set of channels in the conda source code.
It is now up to providers of the conda distributions, such as miniforge or Anaconda (including miniconda), to pre-configure their preferred channels, e.g. by running the necessary conda config --set channels command.
Enhancements
- Add conda doctor check for if the pinned file is ill-formatted. (#7978 via #15022)
- If an HTTP error response includes a field named
detail, relay that as the error message. Stop uppercasing the error message. (#15021 via #15037) - Raise exceptions to prevent renaming or removing the environment specified by
default_activation_env. (#15061) - Make
conda list REGEXraise an exception with exit code 1 when the regular expression does not match any packages in the target environment. (#15074 via #15075) - Add a bytes cache to support sharded repodata. (#15083)
- Add a "file locking" health check to
conda doctor. (#13921 & #14948 via #15114) - Add a new environment spec plugin, called
cep-24, that implements theenvironment.ymlspecification in CEP 24. This is enabled by default. (#15120) - Change the
environment.ymlplugin to be disabled by default. Users can explicitly use it by setting the--environment-specifierflag. (#15120) - Add
conda.models.environment.Environment.extrapolateto extrapolate the environment for a different platform. (#15157 via #15183) - Add
CondaEnvironmentExporter.multiplatform_exportto support export formats with multiple platforms. (#15159 via #15253, #15261) - Update
dev/start/dev\start.batscripts to allow choosing betweenminicondaandminiforgeinstallers via-i/--installerflag,installer_typein~/.condarcconfiguration, or interactive prompt when not specified. (#15084 via #15163) - Report environments marked as frozen (CEP 22) with
+inconda info --envsandconda env list. (#15213)
Bug fixes
- Slash-normalize
PrefixRecord.filesentries on Windows to emit correct output forconda listin environments created by (micro)mamba. (#14523) - Silence error in
fishwhen undefined environment variables are unset. (#14659 via #14660, #15102) - Fix
validate_subdir_configcli validation -- only search config file context sources for subdir configuration. (#15020 via #15038) - Fix
conda install/create/updatecommands to not ignore CLI arguments if an explicit package is specified to install. (#15028) - Override
create_default_packagessetting for specs originating from files. (#15041) - Don't install explicit packages if invoked with
conda update. (#15044) - Update
conda create --cloneto disallow users to specify a--fileCLI argument. (#15702 via #15073) - Ignore explicit packages specified in
create_default_packagessetting and provide a helpful warning message for the setting. (#15115) - Avoid triple-equals string exports when the
MatchSpec.versionfield starts with a single equals. (#15123 via #15141) - Respect
CONDA_PROTECT_FROZEN_ENVSenvironment variable in the absence of--override-frozen. (#15162) - Indicate that a dry run was performed and no changes were made when running
conda init --dry-run. (#15097 via #15211) - Don't load the
environment.ymlenvironment as part of itscan_handlefunction. Just verify if the plugin will be able to interpret the provided file. For theenvironment.ymlplugin, it can read any.yml/.yamlfile. (#15237)
Deprecations
- Mark
conda.cli.common.specs_from_urlkeyword argumentjsonas pending deprecation, to be removed in 26.9. (#15028) - Mark re-exports from
conda.plugins.typesinconda.pluginsas pending deprecation, to be removed in 26.9. Import fromconda.plugins.typesinstead:conda.plugins.CondaAuthHandler→conda.plugins.types.CondaAuthHandlerconda.plugins.CondaEnvironmentSpecifier→conda.plugins.types.CondaEnvironmentSpecifierconda.plugins.CondaHealthCheck→conda.plugins.types.CondaHealthCheckconda.plugins.CondaPostCommand→conda.plugins.types.CondaPostCommandconda.plugins.CondaPostSolve→conda.plugins.types.CondaPostSolveconda.plugins.CondaPostTransactionAction→conda.plugins.types.CondaPostTransactionActionconda.plugins.CondaPreCommand→conda.plugins.types.CondaPreCommandconda.plugins.CondaPrefixDataLoader→conda.plugins.types.CondaPrefixDataLoaderconda.plugins.CondaPreSolve→conda.plugins.types.CondaPreSolveconda.plugins.CondaPreTransactionAction→conda.plugins.types.CondaPreTransactionActionconda.plugins.CondaReporterBackend→conda.plugins.types.CondaReporterBackendconda.plugins.CondaRequestHeader→conda.plugins.types.CondaRequestHeaderconda.plugins.CondaSetting→conda.plugins.types.CondaSettingconda.plugins.CondaSolver→conda.plugins.types.CondaSolverconda.plugins.CondaSubcommand→conda.plugins.types.CondaSubcommandconda.plugins.CondaVirtualPackage→conda.plugins.types.CondaVirtualPackage
- Add deprecation warnings for invalid fields in environment.yml files. (#15120)
- Mark
conda.core.index.calculate_channel_urlsas pending deprecation, to be removed in 26.9. Useconda.models.channel.all_channel_urls(conda.base.context.context.channels)instead. (#15173) - Stop implicitly adding the
defaultschannel to the channel list. (#15196) - Mark
conda.core.index._supplement_index_with_systemas pending deprecation, to be removed in 26.3. - Postpone
conda.utils.unix_path_to_windeprecation to26.3. Useconda.common.path.unix_path_to_wininstead. (#15230) - Constrain minimum compatible conda-build version as >= 25.9 (#15235)
- Mark
conda.auxlib.compat.isiterableas pending deprecation, to be removed in 26.9. Useconda.common.compat.isiterableinstead. (#15252) - Remove
conda.activate._Activator.commands. Useconda commandsinstead. (#15179) - Remove
conda.activate._Activator._parse_and_set_artsargumentarguments. (#15179) - Remove
conda.activate.ensure_binary. Useconda.common.compat.ensure_binaryinstead. (#15179) - Remove
conda.activate.ensure_fs_path_encoding. (#15179) - Remove constants
conda.activate._cygpath,conda.activate.native_path_to_unix,conda.activate.unix_path_to_native,conda.activate.path_identity. (#15179) - Remove
conda.cli.common.confirm. Useconda.reporters.confirm_yninstead. (#15180) - Remove
conda.cli.common.confirm_yn. Useconda.reporters.confirm_yninstead. (#15180) - Remove
conda.cli.common.print_envs_list. Useconda.reporters.render(style='env_list')instead. (#15180) - Remove
conda env createremote_definitionargument. (#15181) - Remove
conda env updateremote_definitionargument. (#15181) - Remove
conda.env.specs.binstar.BinstarSpecclass. (#15181) - Remove experimental Binstar environment spec plugin. (#15181)
- Remove
conda.cli.main_env_remove.execute.Useconda.cli.main_remove.executeinstead. (#15182) - Remove
conda.cli.install.validate_new_prefix. Useconda.cli.install.validate_new_prefixinstead. (#15182) - Remove constant
conda.exports.win_path_to_unix. (#15184) - Remove constant
conda.exports.unix_path_to_win. (#15184) - Remove
conda.exports.iteritems. Use builtindict.items()instead. (#15184) - Remove unused class
conda.exports.Completer. (#15184) - Remove unused class
conda.exports.InstalledPackages. (#15184) - Remove constant
conda.exports.move_to_trash. (#15184) - Remove constant
conda.exports.KEYS. (#15184) - Remove constant
conda.exports.KEYS_DIR. (#15184) - Remove unused method
conda.exports.verify. (#15184) - Remove
conda.exports.symlink_conda. Useconda.activateinstead. (#15184) - Remove
conda.exports._symlink_conda_help. Useconda.activateinstead. (#15184) - Remove
conda.exports.win_conda_bat_redirect. Useconda.activateinstead. (#15184) - Remove constants
conda.testing.CondaCLIFixture,conda.testing.conda_cli,conda.testing.PathFactoryFixture,conda.testing.path_factory,conda.testing.TmpEnvFixture,conda.testing.tmp_env,conda.testing.TmpChannelFixture,conda.testing.tmp_channel,conda.testing.context_aware_monkeypatch,conda.testing.tmp_pkgs_dir,conda.testing.tmp_envs_dir. (#15185) - Remove constant
conda.testing.integration.BIN_DIRECTORY. (#15185) - Remove
conda.misc.rel_path. (#15190) - Remove argument
index_argsconda.misc.explicit. (#15190) - Remove constant
conda.utils.path_identity. Useconda.common.path.path_identityinstead. (#15191) - Remove
conda.utils.win_path_to_cygwin. Useconda.common.path.win_path_to_cygwininstead. (#15191) - Remove
conda.utils.translate_stream. (#15191) - Remove constant
conda.utils._UNIX_SHELL_BASE. Useconda.activateinstead. (#15191) - Remove constant
conda.utils._MSYS2_SHELL_BASE. Useconda.activateinstead. (#15191) - Remove constant
conda.utils._SHELLS. Useconda.activateinstead. (#15191) - Remove free channel from channel configuration. (#15195)
- Remove deprecated property
conda.base.context.restore_free_channel. (#15195) - Remove field
conda.base.context._restore_free_channel. (#15195) - Remove deprecation warning
conda.base.context._warn_defaults_deprecation. (#15196) - Remove deprecated module
conda.cli.python_api. (#15219) - Remove deprecated module
conda.common.disk. (#15219) - Remove deprecated constant
FILESYSTEM_ENCODINGfromconda.common.compat. (#15220) - Remove deprecated function
openfromconda.common.compat. Useconda.common.compat.open_utf8instead. (#15220) - Remove deprecated function
six_with_metaclass...
25.7.0
25.7.0 (2025-08-01)
Enhancements
- Ensure conda does not allow for mixing input file types. (#14684 via #14725)
- Add "environment consistency" health check to
conda doctor. (#14715 via #14799) - Add support for explicit environment specification files as a supported environment spec according to CEP-23, bringing parity between
conda envandconda create/install/update. (#14820) - Add an experimental data model to represent an environment. (#14870)
- Add config option
environment_specifierand CLI argument (--environment-specifier, --env-spec) to allow users to select which environment specifier plugin to use. (#14877) - Enhance
conda exportcommand now supports plugin-based architecture with multiple output formats:environment-yaml(cross-platform YAML, default format)environment-json(cross-platform JSON for programmatic use)explicit(CEP 23 compliant explicit URLs for exact reproduction)requirements(MatchSpec-based requirements format) (#14886)
- Add automatic export format detection based on filename patterns (e.g.,
environment.yaml,explicit.txt,requirements.txt) (#14886) - Add export format aliases for convenience (
yaml,yml,json,reqs,txt) (#14886) - Introduce new dataclass
conda.models.environment.EnvironmentConfigto representEnvironmentsettings, a subset ofcontextsettings that impact environment creation and management. (#14913, #15026) - Allow env spec plugins to opt-out of auto detection. (#14914)
- Handle exceptions coming from environment spec plugins
can_handlefunctions. (#14916) - The
condapackage is included when cloning an environment. (#14917 via #14919) - Lazily evaluate CLI options originating from the plugin manager. (#14925)
- Improve the error message that appears when duplicate records are found in the prefix. (#14927)
- Add virtual packages field to the Environment model. (#14979)
- Add ability to create
EnvironmentConfiginstances from a given context. (#14986) - Add
CondaPluginbase class with name normalization. (#15002) - Enhance
LazyChoicesActionwith dynamic choices property and caching for improved CLI argument validation and help text generation. (#15046)
Bug fixes
- Set default value for
versionparameter whenbuildis set inMatchSpec.conda_build_form(). (#11200 via #15025) - Improve conda notices cache handling for better user experience. (#14229)
- Improve type hints and error handling in conda installer functions. (#14820)
- Fix
conda export --override-channelsbehavior to properly include installed packages' channels (unless--ignore-channelsis also provided), restoring the original intended functionality and improving environment reproducibility. (#15048 via #14886) - Fix
tmp_channelfixture to also include dependencies in the temporary channel. (#14924) - Fix unsetting environment variables when
envvars_force_uppercase = False. (#14934 via #14942) - Respect
--platformoption on subsequent environment operations after initialconda env createcall. (#14949 via #14956) - Apply case normalization to all activation environment variables. (#14960)
- Separate
requirements.txtandexplicitenvironment specs. (#14684 via #14963) - Fix
EnvironmentConfig.aggressive_update_packagestype. It is a list of strings, not a bool. (#14982) - Fix
EnvironmentConfig.channel_settingstype. It is a list of dicts, not a dict. (#14984) - Ensure file types can not be mixed in the conda install command. (#14999)
ProxyErrornow accepts an optional custom message parameter to provide more specific error details. (#14945)
Deprecations
- Mark monkey-patching
jsonto supportfrozendictandobj.to_json()as pending deprecation, to be removed in 26.9. Useconda.common.serialize.json.CondaJSONEncoderinstead. (#14709) - Mark
conda.auxlib.entity.EntityEncoderas pending deprecation, to be removed in 26.9. Useconda.common.serialize.json.CondaJSONEncoderinstead. (#14709) - Mark
conda.auxlib.logz.DumpEncoderas pending deprecation, to be removed in 26.9. Useconda.common.serialize.json.CondaJSONEncoderinstead. (#14709) - Mark
conda.auxlib.logz._DUMPSas pending deprecation, to be removed in 26.9. Useconda.common.serialize.json.CondaJSONEncoder(sort_keys=True).encodeinstead. (#14709) - Mark
conda.auxlib.logz.jsondumpsas pending deprecation, to be removed in 26.9. Useconda.common.serialize.json.CondaJSONEncoder(sort_keys=True).encodeinstead. (#14709) - Mark
conda.common.serialize.EntityEncoderas pending deprecation, to be removed in 26.9. Useconda.common.serialize.json.CondaJSONEncoderinstead. (#14709) - Mark
conda.common.serialize.json_loadas pending deprecation, to be removed in 26.9. Useconda.common.serialize.json.loads(sort_keys=True)instead. (#14709) - Mark
conda.common.serialize.json_dumpas pending deprecation, to be removed in 26.9. Useconda.common.serialize.json.dumps(sort_keys=True)instead. (#14709) - Mark
conda.exports.EntityEncoderas pending deprecation, to be removed in 26.9. Useconda.common.serialize.json.CondaJSONEncoderinstead. (#14709) - Mark
conda.env.specs.binstar.BinstarSpec.environmentas pending deprecation in 26.9. Useconda.env.specs.binstar.BinstarSpec.envinstead. (#14397) - Mark
conda.env.specs.requirements.RequirementsSpec.environmentas pending deprecation in 26.9. Useconda.env.specs.requirements.RequirementsSpec.envinstead. (#14397) - Mark
conda.env.specs.yaml_file.YamlFileSpec.environmentas pending deprecation in 26.9. Useconda.env.specs.yaml_file.YamlFileSpec.envinstead. (#14397) - Mark
conda.env.env.Environmentas pending deprecation in 26.9. Useconda.env.env.EnvironmentYamlinstead. (#14981) - Mark
conda.cli.common.arg2specas pending deprecation, to be removed in 26.9. (#15028) - Mark
conda.cli.common.specs_from_argskeyword argumentjsonas pending deprecation, to be removed in 26.9. (#15028) - Mark
conda.gateways.disk.create.create_application_entry_pointas pending deprecation, to be removed in 26.9. (#15062) - Mark
conda.gateways.disk.create.ProgressFileWrapperas pending deprecation, to be removed in 26.9. (#15062) - Mark
conda.gateways.disk.create.create_fake_executable_softlinkas pending deprecation, to be removed in 26.9. (#15062) - Postpone
conda.env.specs.binstardeprecation to 26.9. (#15062)
Docs
- Add documentation for
conda exportcommand with examples and format specifications. (#14886) - Add environment exporter plugin development guide with examples and best practices. (#14886)
- Update environment management documentation to highlight new export capabilities. (#14886)
- Update cheatsheet with new export formats and commands. (#14886)
- Enhance command comparison table to include new export functionality. (#14886)
- Add glossary entries for CEP 23, environment exporters, explicit format, and requirements format. (#14886)
- Add note about enhanced
conda exportfunctionality alongside existingconda env export. (#14886) - Add docs about environment spec plugin detection. (#14918)
- No longer claim that
noarch/repodata.json.bz2is required. Conda has not usedrepodata.json.bz2for years. (#14965)
Other
- Delay environment activation in dev setup to avoid issues when
default_activation_envis set. (#14910) - Environment Spec plugins should return an Environment model. (#14937)
- EnvironmentConfig lists of values should be tuples. (#15000)
- Avoid modifying
tests/env/supportin test suite and confusing subsequent test runs. (#15011) - Remove unused import of deprecated
DumpEncoder. (#15015)
Contributors
- @conda-bot
- @dholth
- @jaimergp
- @jezdez
- @jjhelmus
- @kathatherine
- @kenodegard
- @ForgottenProgramme
- @mmc1718 made their first contribution in #15025
- @soapy1
- @travishathaway
- @dependabot[bot]
- @pre-commit-ci[bot]
25.5.1
25.5.0
25.5.0 (2025-05-21)
Enhancements
- Add the ability to define pre- and post-transaction hooks. (#14754)
- Adds support for showing and manipulating settings registered via the settings plugin hook to
conda config. (#13661 via #14510) - Raise
conda.exceptions.OfflineErrorinstead of genericRuntimeErrorwhen--offlineis used for better error handling. (#14664 via #14665) - Add
context.default_activation_envsetting, which allows users to customize which environment should get auto activated on initialization (ifcontext.auto_activateis enabled), as well asconda activatecalls without arguments. Defaults tobase. (#14666) - Provide
conda init --condabin, which only adds the$CONDA_PREFIX/condabindirectory to the PATH environment variable instead of installing a shell function. (#14703) - Add
environment_specifiersplugin hooks to allow the creation of plugins to read different file formats and sources. (#14710) - Extend
PrefixDataAPI with two constructors (from_name(),from_context()), a new property (name), several boolean-returning methods (exists(),is_environment(),is_base()), and a few exception-raising methods (assert_exists(),assert_environment(),assert_writable(),validate_path(),validate_name()). An additional methodset_nonadmin()allows to plant the.nonadminmarker on Windows. (#14747 via #14750) - Add support for frozen environment markers (CEP 22). (#14746 via #14766)
- Add a plugin hook for
PrefixDataloaders and use it to wrap the existing PyPI interoperability features. These are now present inconda.plugins.prefix_data_loaders.pypi. (#14780) - Add a
--fieldsflag toconda listthat allows to customize the content of thehumanoutput format. (#14781) - Add debug logs to get visibility into environment spec plugin selection. (#14815)
- Add
conda.models.records.SolvedRecordclass. It is aPackageRecordsubclass augmented with therequested_specfield originally found inPrefixRecord. (#14821)
Bug fixes
- Cleanup references to
DepsModifier.UPDATE_SPECS. (#14807) - Report package variant installation as "REVISED" as opposed to "DOWNGRADED". (#13797 via #14727)
- Add a validation step to check if the target environment is writable when running the
installorupdatecommands. (#12561 via #14668) - Fix cache key in
PrefixData. It will now considerinteroperability. (#14750) - Do not cache
PrefixDatarecords across successiveconda listinvocations. (#14750) environment.yamlspec plugin should only handle yaml files (files with.yamlor.ymlfile extensions). (#14823)- Fix
conda inforendering to display components in a consistent order. (#14829 via #14831)
Deprecations
- Mark
conda.base.context.context.auto_activate_baseas pending deprecation. Useconda.base.context.context.auto_activateinstead. It will be permanently removed in 26.3. (#14666) - Mark
conda.base.context.Context.pip_interop_enabledas pending deprecation, to be removed in 26.3. Useconda.base.context.Context.prefix_data_interoperability. instead. (#14750) - Mark
conda.base.context._first_writable_envs_diras pending deprecation. Useconda.gateways.disk.create.first_writable_envs_dir()andPrefixData.from_name()instead. It will be permanently removed in 26.3. (#14750) - Mark
conda.base.context.validate_prefix_nameas pending deprecation. UsePrefixData.validate_name()andPrefixData.from_name()instead. It will be permanently removed in 26.3. (#14750) - Mark
conda.cli.common.validate_prefixas pending deprecation. UsePrefixData.assert_environment()instead. It will be permanently removed in 26.3. (#14750) - Mark
conda.cli.common.validate_prefix_is_writableas pending deprecation. UsePrefixData.assert_writable()instead. It will be permanently removed in 26.3. (#14750) - Mark
conda.cli.install.check_prefixas pending deprecation. UsePrefixData.exists(),PrefixData.validate_path(),PrefixData.validate_name()instead. It will be permanently removed in 26.3. (#14750) - Mark
conda.cli.install.print_activateas pending deprecation. Useconda.cli.common.print_activateinstead. It will be permanently removed in 26.3. (#14670) - Mark
conda.cli.install.validate_new_prefixas pending deprecation. UsePrefixData.exists()andPrefixData.validate_path()instead. It will be permanently removed in 26.3. (#14750) - Mark
conda.cli.install.validate_prefix_existsas pending deprecation. UsePrefixData.exists()instead. It will be permanently removed in 26.3. (#14750) - Mark
conda.cli.main_info.get_info_componentsas pending deprecation to be removed in 26.3. Useconda.cli.main_info.iter_info_componentsinstead. (#14837) - Mark
conda.cli.main_rename.check_protected_dirsas pending deprecation. UsePrefixData.validate_path()instead. It will be permanently removed in 26.3. (#14750) - Mark
conda.cli.main_rename.validate_srcas pending deprecation. UsePrefixData.validate_path()andPrefixData.validate_name()instead. It will be permanently removed in 26.3. (#14750) - Mark
conda.common.pkg_formats.pythonmodule as pending deprecation, to be removed in 26.3. Useconda.plugins.prefix_data_loaders.pypi.pkg_formatinstead. (#14798) - Mark
conda.common.pkg_formatssubpackage as pending deprecation, to be removed in 26.3. Use theprefix_data_loadersplugin hook instead. (#14798) - Mark
conda.common.url.hex_octal_to_intas pending deprecation. Useint(..., 16)instead. It will be permanently removed in 26.3. (#14750) - Mark
conda.core.link.PrefixActionGroupas pending deprecation. Useconda.core.link.PrefixActionsinstead. It will be permanently removed in 26.3. (#14754) - Mark
conda.core.link.PrefixActionsas deprecated. It will be renamed toconda.core.link.PrefixActionGroupin 26.3. (#14754) - Mark
conda.core.path_actions._Actionas pending deprecation. Useconda.core.path_actions.Actioninstead. It will be permanently removed in 26.3. (#14754) - Mark
conda.core.prefix_data.get_python_version_for_prefix()as pending deprecation, to be removed in 26.3. Useconda.core.prefix_data.PrefixData(prefix).get("python").versioninstead. (#14750) - Mark
conda.core.prefix_data.PrefixDatakeyword argumentpip_interop_enabledas pending deprecation, to be removed in 26.3. Use theinteroperabilitykeyword argument instead. (#14750) - Mark
conda.core.prefix_data.PrefixData._load_site_packages()as pending deprecation, to be removed in 26.3. Useconda.plugins.prefix_data_loaders.pypi.load_site_packages()instead. (#14750) - Mark
conda.core.prefix_data.PrefixData._python_pkg_recordas pending deprecation, to be removed in 26.3. UsePrefixData.get("python")instead. (#14750) - Mark
conda.core.prefix_data.python_record_for_prefix()as pending deprecation. Useconda.core.prefix_data.PrefixData(prefix).get("python")instead. (#14750) - Mark
conda.gateways.disk.read.read_python_recordas pending deprecation, to be removed in 26.3. Useconda.plugins.prefix_data_loaders.pypi.pkg_format.read_python_recordinstead. (#14798) - Mark
conda.gateways.disk.test.is_conda_environmentas pending deprecation. UsePrefixData.is_environment()instead. It will be permanently removed in 26.3. (#14750) - Mark
conda.gateways.disk.test.touch_nonadminas pending deprecation. UsePrefixData.set_nonadmin()instead. It will be permanently removed in 26.3. (#14750) - Mark
conda.models.records.PackageRecord.schannelas pending deprecation. Useconda.models.records.PackageRecord.channel_nameinstead. It will be permanently removed in 26.3. (#14781) - Mark
conda.trust.signature_verificationandconda.trust.constantsmodules for deprecation in version 25.9.0, to be removed in version 26.3.0. The functionality will be moved toconda-content-trustandconda-anaconda-trust-rootpackages respectively. (#14849) - Mark
conda info --licenseas pending deprecation to be removed in 26.3. (#14831) - Mark
conda info --rootas pending deprecation to be removed in 26.3. Useconda info --baseinstead. (#14831)
Docs
- Add type hints and docstrings to
conda.core.portability. (#13820) - Add type hints and docstrings to
conda.core.subdir_data. (#13821) - Add type hints to
conda.base.constants. (#13480) - Add type hints to
conda.base.context. (#14776) - Add type hints to
conda.__init__,conda.exceptionsandconda.exception_handler. (#14776) - Add type hints to
conda.core.prefix_data. (#14779) - Add examples to environment specs plugin docs. (#14814)
- Add type hints to
conda.models.channel.Channel. (#14817) - Update the conda cheatsheet to 25.3.1 version. (#14830)
Other
- Refactor
--repodata-fniteration inconda.cli.installand other smaller cleanups. (#14670) - Refactor command line argument validations from
conda.cli.install.installto the relevantclimodules. (#14742) - Refactor
conda create --clonelogic into a separate function. (#14743) - Use
dict.fromkeysfor sequence deduplication, instead ofIndexedSet(). (#14777)
Contributors
- @conda-bot
- @faithrider
- @jaimergp
- @jezdez
- @kathatherine
- @kenodegard
- @peytondmurray
- @samhaese
- @soapy1
- @travishathaway
- @dependabot[bot]
- @pre-commit-ci[bot]
New Contributors
- @faithrider made their first contribution in #13820
- @peytondmurray made their first contribution in #14754