From d56495c1d1740a6c2f84c7592711ebdbd6419d04 Mon Sep 17 00:00:00 2001 From: Bianca Henderson Date: Wed, 29 May 2024 17:40:02 -0400 Subject: [PATCH] Remove deprecated code for conda-build 24.7 (#5333) * Remove deprecated constants etc. from conda_interface.py per expedited deprecation schedule * More conda_interface.py deprecation removals * More conda_build.conda_interface.py deprecation removals * Remove remaining conda_build.interface.py deprecations / module * Remove conda_build.config.noarch_python_build_age_default * Remove conda_build.index.channel_data deprecation * Remove conda_build.config.Config.override_channels * Remove deprecations from conda_build.utils * Remove deprecated conda_build.variants.get_vars(loop_only) argument * Update news file to sort removals into alphabetical order and make it more generally readable * Update '_channel_data' variable in * Clean up unnecessary code * Update news file --- conda_build/conda_interface.py | 550 --------------------------- conda_build/config.py | 13 - conda_build/index.py | 53 +-- conda_build/utils.py | 43 --- conda_build/variants.py | 2 - news/5333-remove-24.7.x-deprecations | 95 +++++ 6 files changed, 96 insertions(+), 660 deletions(-) delete mode 100644 conda_build/conda_interface.py create mode 100644 news/5333-remove-24.7.x-deprecations diff --git a/conda_build/conda_interface.py b/conda_build/conda_interface.py deleted file mode 100644 index 18056cc368..0000000000 --- a/conda_build/conda_interface.py +++ /dev/null @@ -1,550 +0,0 @@ -# Copyright (C) 2014 Anaconda, Inc -# SPDX-License-Identifier: BSD-3-Clause -from __future__ import annotations - -import configparser as _configparser -import os as _os -from builtins import input as _input -from functools import partial as _partial -from importlib import import_module as _import_module -from io import StringIO as _StringIO - -from conda import __version__ -from conda.auxlib.entity import EntityEncoder as _EntityEncoder -from conda.base.constants import PREFIX_PLACEHOLDER as _PREFIX_PLACEHOLDER -from conda.base.context import context as _context -from conda.base.context import determine_target_prefix as _determine_target_prefix -from conda.base.context import non_x86_machines as _non_x86_linux_machines -from conda.base.context import reset_context as _reset_context -from conda.cli.common import spec_from_line as _spec_from_line -from conda.cli.common import specs_from_args as _specs_from_args -from conda.cli.common import specs_from_url as _specs_from_url -from conda.cli.conda_argparse import ArgumentParser as _ArgumentParser -from conda.common.path import win_path_to_unix as _win_path_to_unix -from conda.common.toposort import _toposort as __toposort -from conda.core.package_cache_data import ( - ProgressiveFetchExtract as _ProgressiveFetchExtract, -) -from conda.exceptions import CondaError as _CondaError -from conda.exceptions import CondaHTTPError as _CondaHTTPError -from conda.exceptions import LinkError as _LinkError -from conda.exceptions import LockError as _LockError -from conda.exceptions import NoPackagesFoundError as _NoPackagesFoundError -from conda.exceptions import PaddingError as _PaddingError -from conda.exceptions import ResolvePackageNotFound as _ResolvePackageNotFound -from conda.exceptions import UnsatisfiableError as _UnsatisfiableError -from conda.exports import Completer as _Completer -from conda.exports import InstalledPackages as _InstalledPackages -from conda.exports import symlink_conda as _symlink_conda -from conda.gateways.connection.download import TmpDownload as _TmpDownload -from conda.gateways.connection.download import download as _download -from conda.gateways.connection.session import CondaSession as _CondaSession -from conda.gateways.disk.create import TemporaryDirectory as _TemporaryDirectory -from conda.gateways.disk.link import lchmod as _lchmod -from conda.misc import untracked as _untracked -from conda.misc import walk_prefix as _walk_prefix -from conda.models.channel import Channel as _Channel -from conda.models.channel import get_conda_build_local_url as _get_conda_build_local_url -from conda.models.enums import FileMode as _FileMode -from conda.models.enums import PathType as _PathType -from conda.models.match_spec import MatchSpec as _MatchSpec -from conda.models.records import PackageRecord as _PackageRecord -from conda.models.version import VersionOrder as _VersionOrder -from conda.models.version import normalized_version as _normalized_version -from conda.resolve import Resolve as _Resolve -from conda.utils import human_bytes as _human_bytes -from conda.utils import unix_path_to_win as _unix_path_to_win -from conda.utils import url_path as _url_path - -from .deprecations import deprecated -from .utils import rm_rf as _rm_rf - -try: - from conda.cli.helpers import add_parser_channels as _add_parser_channels - from conda.cli.helpers import add_parser_prefix as _add_parser_prefix -except ImportError: - # conda<23.11 - from conda.cli.conda_argparse import add_parser_channels as _add_parser_channels - from conda.cli.conda_argparse import add_parser_prefix as _add_parser_prefix - -deprecated.constant( - "24.5", - "24.7", - "Completer", - _Completer, - addendum="Unused.", -) -deprecated.constant( - "24.5", - "24.7", - "CondaSession", - _CondaSession, - addendum="Use `conda.gateways.connection.session.CondaSession` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "InstalledPackages", - _InstalledPackages, - addendum="Unused.", -) -deprecated.constant( - "24.5", - "24.7", - "NoPackagesFound", - _ResolvePackageNotFound, - addendum="Use `conda.exceptions.ResolvePackageNotFound` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "Unsatisfiable", - _UnsatisfiableError, - addendum="Use `conda.exceptions.UnsatisfiableError` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "symlink_conda", - _symlink_conda, - addendum="Unused.", -) - - -deprecated.constant( - "24.5", - "24.7", - "ArgumentParser", - _ArgumentParser, - addendum="Use `conda.cli.conda_argparse.ArgumentParser` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "add_parser_channels", - _add_parser_channels, - addendum="Use `conda.cli.helpers.add_parser_channels` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "add_parser_prefix", - _add_parser_prefix, - addendum="Use `conda.cli.helpers.add_parser_prefix` instead.", -) - -deprecated.constant( - "24.5", - "24.7", - "Channel", - _Channel, - addendum="Use `conda.models.channel.Channel` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "FileMode", - _FileMode, - addendum="Use `conda.models.enums.FileMode` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "PathType", - _PathType, - addendum="Use `conda.models.enums.PathType` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "MatchSpec", - _MatchSpec, - addendum="Use `conda.models.match_spec.MatchSpec` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "PackageRecord", - _PackageRecord, - addendum="Use `conda.models.records.PackageRecord` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "VersionOrder", - _VersionOrder, - addendum="Use `conda.models.version.VersionOrder` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "normalized_version", - _normalized_version, - addendum="Use `conda.models.version.normalized_version` instead.", -) - -deprecated.constant( - "24.5", - "24.7", - "EntityEncoder", - _EntityEncoder, - addendum="Use `conda.auxlib.entity.EntityEncoder` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "Resolve", - _Resolve, - addendum="Use `conda.resolve.Resolve` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "TemporaryDirectory", - _TemporaryDirectory, - addendum="Use `conda.gateways.disk.create.TemporaryDirectory` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "TmpDownload", - _TmpDownload, - addendum="Use `conda.gateways.connection.download.TmpDownload` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "download", - _download, - addendum="Use `conda.gateways.connection.download.download` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "_toposort", - __toposort, - addendum="Use `conda.common.toposort._toposort` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "human_bytes", - _human_bytes, - addendum="Use `conda.utils.human_bytes` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "lchmod", - _lchmod, - addendum="Use `conda.gateways.disk.link.lchmod` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "prefix_placeholder", - _PREFIX_PLACEHOLDER, - addendum="Use `conda.base.constants.PREFIX_PLACEHOLDER` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "rm_rf", - _rm_rf, - addendum="Use `conda_build.utils.rm_rf` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "spec_from_line", - _spec_from_line, - addendum="Use `conda.cli.common.spec_from_line` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "specs_from_args", - _specs_from_args, - addendum="Use `conda.cli.common.specs_from_args` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "specs_from_url", - _specs_from_url, - addendum="Use `conda.cli.common.specs_from_url` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "unix_path_to_win", - _unix_path_to_win, - addendum="Use `conda.utils.unix_path_to_win` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "untracked", - _untracked, - addendum="Use `conda.misc.untracked` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "url_path", - _url_path, - addendum="Use `conda.utils.url_path` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "walk_prefix", - _walk_prefix, - addendum="Use `conda.misc.walk_prefix` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "win_path_to_unix", - _win_path_to_unix, - addendum="Use `conda.common.path.win_path_to_unix` instead.", -) - -deprecated.constant( - "24.5", - "24.7", - "configparser", - _configparser, - addendum="Use `configparser` instead.", -) -deprecated.constant("24.5", "24.7", "os", _os, addendum="Use `os` instead.") -deprecated.constant( - "24.5", - "24.7", - "partial", - _partial, - addendum="Use `functools.partial` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "import_module", - _import_module, - addendum="Use `importlib.import_module` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "StringIO", - _StringIO, - addendum="Use `io.StringIO` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "input", - _input, - addendum="Use `input` instead.", -) - -deprecated.constant( - "24.5", - "24.7", - "context", - _context, - addendum="Use `conda.base.context.context` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "determine_target_prefix", - _determine_target_prefix, - addendum="Use `conda.base.context.determine_target_prefix` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "non_x86_linux_machines", - _non_x86_linux_machines, - addendum="Use `conda.base.context.non_x86_machines` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "ProgressiveFetchExtract", - _ProgressiveFetchExtract, - addendum="Use `conda.core.package_cache_data.ProgressiveFetchExtract` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "CondaError", - _CondaError, - addendum="Use `conda.exceptions.CondaError` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "CondaHTTPError", - _CondaHTTPError, - addendum="Use `conda.exceptions.CondaHTTPError` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "LinkError", - _LinkError, - addendum="Use `conda.exceptions.LinkError` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "LockError", - _LockError, - addendum="Use `conda.exceptions.LockError` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "NoPackagesFoundError", - _NoPackagesFoundError, - addendum="Use `conda.exceptions.NoPackagesFoundError` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "PaddingError", - _PaddingError, - addendum="Use `conda.exceptions.PaddingError` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "UnsatisfiableError", - _UnsatisfiableError, - addendum="Use `conda.exceptions.UnsatisfiableError` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "get_conda_build_local_url", - _get_conda_build_local_url, - addendum="Use `conda.models.channel.get_conda_build_local_url` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "reset_context", - _reset_context, - addendum="Use `conda.base.context.reset_context` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "binstar_upload", - _context.binstar_upload, - addendum="Use `conda.base.context.context.binstar_upload` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "default_python", - _context.default_python, - addendum="Use `conda.base.context.context.default_python` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "envs_dirs", - _context.envs_dirs, - addendum="Use `conda.base.context.context.envs_dirs` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "pkgs_dirs", - list(_context.pkgs_dirs), - addendum="Use `conda.base.context.context.pkgs_dirs` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "cc_platform", - _context.platform, - addendum="Use `conda.base.context.context.platform` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "root_dir", - _context.root_prefix, - addendum="Use `conda.base.context.context.root_prefix` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "root_writable", - _context.root_writable, - addendum="Use `conda.base.context.context.root_writable` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "subdir", - _context.subdir, - addendum="Use `conda.base.context.context.subdir` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "create_default_packages", - _context.create_default_packages, - addendum="Use `conda.base.context.context.create_default_packages` instead.", -) - -deprecated.constant( - "24.5", - "24.7", - "get_rc_urls", - lambda: list(_context.channels), - addendum="Use `conda.base.context.context.channels` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "get_prefix", - _partial(_determine_target_prefix, _context), - addendum="Use `conda.base.context.context.target_prefix` instead.", -) -deprecated.constant( - "24.5", - "24.7", - "cc_conda_build", - _context.conda_build, - addendum="Use `conda.base.context.context.conda_build` instead.", -) - -deprecated.constant( - "24.5", - "24.7", - "get_conda_channel", - _Channel.from_value, - addendum="Use `conda.models.channel.Channel.from_value` instead.", -) - -deprecated.constant( - "24.5", - "24.7", - "env_path_backup_var_exists", - _os.getenv("CONDA_PATH_BACKUP"), - addendum="Unused.", -) - - -deprecated.constant( - "24.5", - "24.7", - "CONDA_VERSION", - __version__, - addendum="Use `conda.__version__` instead.", -) diff --git a/conda_build/config.py b/conda_build/config.py index 534854144b..8e444c1a42 100644 --- a/conda_build/config.py +++ b/conda_build/config.py @@ -19,7 +19,6 @@ from conda.base.context import context from conda.utils import url_path -from .deprecations import deprecated from .utils import ( get_build_folders, get_conda_operation_locks, @@ -54,7 +53,6 @@ def set_invocation_time(): _src_cache_root_default = None error_overlinking_default = "false" error_overdepending_default = "false" -deprecated.constant("24.5", "24.7", "noarch_python_build_age_default", 0) enable_static_default = "false" no_rewrite_stdout_env_default = "false" ignore_verify_codes_default = [] @@ -777,17 +775,6 @@ def test_dir(self): def subdirs_same(self): return self.host_subdir == self.build_subdir - @property - @deprecated( - "24.5", - "24.7", - addendum="Defer to `conda.base.context.context.channels` instead.", - ) - def override_channels(self) -> bool: - return bool( - context._argparse_args and context._argparse_args.get("override_channels") - ) - def clean(self, remove_folders=True): # build folder is the whole burrito containing envs and source folders # It will only exist if we download source, or create a build or test environment diff --git a/conda_build/index.py b/conda_build/index.py index 3a2f9ab10b..fc72a3fd0d 100644 --- a/conda_build/index.py +++ b/conda_build/index.py @@ -1,9 +1,7 @@ # Copyright (C) 2014 Anaconda, Inc # SPDX-License-Identifier: BSD-3-Clause -import json import logging import os -import time from functools import partial from os.path import dirname @@ -14,9 +12,7 @@ from conda_index.index import update_index as _update_index from . import utils -from .deprecations import deprecated from .utils import ( - JSONDecodeError, get_logger, ) @@ -28,8 +24,6 @@ local_subdir = "" local_output_folder = "" cached_channels = [] -_channel_data = {} -deprecated.constant("24.1", "24.7", "channel_data", _channel_data) # TODO: this is to make sure that the index doesn't leak tokens. It breaks use of private channels, though. # os.environ['CONDA_ADD_ANACONDA_TOKEN'] = "false" @@ -56,7 +50,6 @@ def get_build_index( global local_output_folder global cached_index global cached_channels - global _channel_data mtime = 0 channel_urls = list(utils.ensure_list(channel_urls)) @@ -131,55 +124,11 @@ def get_build_index( platform=subdir, ) - expanded_channels = {rec.channel for rec in cached_index} - - superchannel = {} - # we need channeldata.json too, as it is a more reliable source of run_exports data - for channel in expanded_channels: - if channel.scheme == "file": - location = channel.location - if utils.on_win: - location = location.lstrip("/") - elif not os.path.isabs(channel.location) and os.path.exists( - os.path.join(os.path.sep, channel.location) - ): - location = os.path.join(os.path.sep, channel.location) - channeldata_file = os.path.join( - location, channel.name, "channeldata.json" - ) - retry = 0 - max_retries = 1 - if os.path.isfile(channeldata_file): - while retry < max_retries: - try: - with open(channeldata_file, "r+") as f: - _channel_data[channel.name] = json.load(f) - break - except (OSError, JSONDecodeError): - time.sleep(0.2) - retry += 1 - else: - # download channeldata.json for url - if not context.offline: - try: - _channel_data[channel.name] = utils.download_channeldata( - channel.base_url + "/channeldata.json" - ) - except CondaHTTPError: - continue - # collapse defaults metachannel back into one superchannel, merging channeldata - if channel.base_url in context.default_channels and _channel_data.get( - channel.name - ): - packages = superchannel.get("packages", {}) - packages.update(_channel_data[channel.name]) - superchannel["packages"] = packages - _channel_data["defaults"] = superchannel local_index_timestamp = os.path.getmtime(index_file) local_subdir = subdir local_output_folder = output_folder cached_channels = channel_urls - return cached_index, local_index_timestamp, _channel_data + return cached_index, local_index_timestamp, None def _ensure_valid_channel(local_folder, subdir): diff --git a/conda_build/utils.py b/conda_build/utils.py index 796f849caf..a2c456c66e 100644 --- a/conda_build/utils.py +++ b/conda_build/utils.py @@ -66,7 +66,6 @@ from conda.models.version import VersionOrder from conda.utils import unix_path_to_win -from .deprecations import deprecated from .exceptions import BuildLockError if TYPE_CHECKING: @@ -1409,47 +1408,6 @@ def get_installed_packages(path): return installed -@deprecated("24.5", "24.7", addendum="Use `frozendict.deepfreeze` instead.") -def _convert_lists_to_sets(_dict): - for k, v in _dict.items(): - if hasattr(v, "keys"): - _dict[k] = HashableDict(_convert_lists_to_sets(v)) - elif hasattr(v, "__iter__") and not isinstance(v, str): - try: - _dict[k] = sorted(list(set(v))) - except TypeError: - _dict[k] = sorted(list({tuple(_) for _ in v})) - return _dict - - -@deprecated("24.5", "24.7", addendum="Use `frozendict.deepfreeze` instead.") -class HashableDict(dict): - """use hashable frozen dictionaries for resources and resource types so that they can be in sets""" - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self = _convert_lists_to_sets(self) - - def __hash__(self): - return hash(json.dumps(self, sort_keys=True)) - - -@deprecated("24.5", "24.7", addendum="Use `frozendict.deepfreeze` instead.") -def represent_hashabledict(dumper, data): - value = [] - - for item_key, item_value in data.items(): - node_key = dumper.represent_data(item_key) - node_value = dumper.represent_data(item_value) - - value.append((node_key, node_value)) - - return yaml.nodes.MappingNode("tag:yaml.org,2002:map", value) - - -yaml.add_representer(HashableDict, represent_hashabledict) - - # http://stackoverflow.com/a/10743550/1170370 @contextlib.contextmanager def capture(): @@ -1622,7 +1580,6 @@ def filter_info_files(files_list, prefix): ) -@deprecated.argument("24.5", "24.7", "config") def rm_rf(path): from conda.core.prefix_data import delete_prefix_from_linked_data from conda.gateways.disk.delete import rm_rf as rm_rf diff --git a/conda_build/variants.py b/conda_build/variants.py index 447025818c..b185a7eb34 100644 --- a/conda_build/variants.py +++ b/conda_build/variants.py @@ -18,7 +18,6 @@ import yaml from conda.base.context import context -from .deprecations import deprecated from .utils import ensure_list, get_logger, islist, on_win, trim_empty_keys from .version import _parse as parse_version @@ -701,7 +700,6 @@ def get_package_variants(recipedir_or_metadata, config=None, variants=None): return filter_combined_spec_to_used_keys(combined_spec, specs=specs) -@deprecated.argument("24.5", "24.7", "loop_only") def get_vars(variants: Iterable[dict[str, Any]]) -> set[str]: """For purposes of naming/identifying, provide a way of identifying which variables contribute to the matrix dimensionality""" diff --git a/news/5333-remove-24.7.x-deprecations b/news/5333-remove-24.7.x-deprecations new file mode 100644 index 0000000000..332176a70c --- /dev/null +++ b/news/5333-remove-24.7.x-deprecations @@ -0,0 +1,95 @@ +### Enhancements + +* + +### Bug fixes + +* + +### Deprecations + +* Remove the following deprecations (#5333): + * `conda_build.config.Config.override_channels` (use `conda.base.context.context.channels` instead) + * `conda_build.config.noarch_python_build_age_default` + * `conda_build.conda_interface.add_parser_channels` (use `conda.cli.helpers.add_parser_channels` instead) + * `conda_build.conda_interface.add_parser_prefix` (use `conda.cli.helpers.add_parser_prefix` instead) + * `conda_build.conda_interface.ArgumentParser` (use `conda.cli.conda_argparse.ArgumentParser` instead) + * `conda_build.conda_interface.binstar_upload` (use `conda.base.context.context.binstar_upload` instead) + * `conda_build.conda_interface.cc_conda_build` (use `conda.base.context.context.conda_build` instead) + * `conda_build.conda_interface.cc_platform` (use `conda.base.context.context.platform` instead) + * `conda_build.conda_interface.Channel` (use `conda.models.channel.Channel` instead) + * `conda_build.conda_interface.Completer` + * `conda_build.conda_interface.configparser` (use `configparser` instead) + * `conda_build.conda_interface.CondaError` (use `conda.exceptions.CondaError` instead) + * `conda_build.conda_interface.CondaHTTPError` (use `conda.exceptions.CondaHTTPError` instead) + * `conda_build.conda_interface.CondaSession` (use `conda.gateways.connection.session.CondaSession` instead) + * `conda_build.conda_interface.CONDA_VERSION` (use `conda.__version__` instead) + * `conda_build.conda_interface.context` (use `conda.base.context.context` instead) + * `conda_build.conda_interface.create_default_packages` (use `conda.base.context.context.create_default_packages` instead) + * `conda_build.conda_interface.default_python` (use `conda.base.context.context.default_python` instead) + * `conda_build.conda_interface.determine_target_prefix` (use `conda.base.context.determine_target_prefix` instead) + * `conda_build.conda_interface.download` (use `conda.gateways.connection.download.download` instead) + * `conda_build.conda_interface.env_path_backup_var_exists` + * `conda_build.conda_interface.envs_dirs` (use `conda.base.context.context.envs_dirs` instead) + * `conda_build.conda_interface.EntityEncoder` (use `conda.auxlib.entity.EntityEncoder` instead) + * `conda_build.conda_interface.FileMode` (use `conda.models.enums.FileMode` instead) + * `conda_build.conda_interface.get_conda_build_local_url` (use `conda.models.channel.get_conda_build_local_url` instead) + * `conda_build.conda_interface.get_conda_channel` (use `conda.models.channel.Channel.from_value` instead) + * `conda_build.conda_interface.get_prefix` (use `conda.base.context.context.target_prefix` instead) + * `conda_build.conda_interface.get_rc_urls` (use `conda.base.context.context.channels` instead) + * `conda_build.conda_interface.human_bytes` (use `conda.utils.human_bytes` instead) + * `conda_build.conda_interface.import_module` (use `importlib.import_module` instead) + * `conda_build.conda_interface.input` (use `input` instead) + * `conda_build.conda_interface.InstalledPackages` + * `conda_build.conda_interface.lchmod` (use `conda.gateways.disk.link.lchmod` instead) + * `conda_build.conda_interface.LinkError` (use `conda.exceptions.LinkError` instead) + * `conda_build.conda_interface.LockError` (use `conda.exceptions.LockError` instead) + * `conda_build.conda_interface.MatchSpec` (use `conda.models.match_spec.MatchSpec` instead) + * `conda_build.conda_interface.non_x86_linux_machines` (use `conda.base.context.non_x86_machines` instead) + * `conda_build.conda_interface.NoPackagesFound` (use `conda.exceptions.ResolvePackageNotFound` instead) + * `conda_build.conda_interface.NoPackagesFoundError` (use `conda.exceptions.NoPackagesFoundError` instead) + * `conda_build.conda_interface.normalized_version` (use `conda.models.version.normalized_version` instead) + * `conda_build.conda_interface.os` (use `os` instead) + * `conda_build.conda_interface.PackageRecord` (use `conda.models.records.PackageRecord` instead) + * `conda_build.conda_interface.PaddingError` (use `conda.exceptions.PaddingError` instead) + * `conda_build.conda_interface.partial` (use `functools.partial` instead) + * `conda_build.conda_interface.PathType` (use `conda.models.enums.PathType` instead) + * `conda_build.conda_interface.pkgs_dirs` (use `conda.base.context.context.pkgs_dirs` instead) + * `conda_build.conda_interface.prefix_placeholder` (use `conda.base.constants.PREFIX_PLACEHOLDER` instead) + * `conda_build.conda_interface.ProgressiveFetchExtract` (use `conda.core.package_cache_data.ProgressiveFetchExtract` instead) + * `conda_build.conda_interface.reset_context` (use `conda.base.context.reset_context` instead) + * `conda_build.conda_interface.Resolve` (use `conda.resolve.Resolve` instead) + * `conda_build.conda_interface.rm_rf` (use `conda_build.utils.rm_rf` instead) + * `conda_build.conda_interface.root_dir` (use `conda.base.context.context.root_prefix` instead) + * `conda_build.conda_interface.root_writable` (use `conda.base.context.context.root_writable` instead) + * `conda_build.conda_interface.spec_from_line` (use `conda.cli.common.spec_from_line` instead) + * `conda_build.conda_interface.specs_from_args` (use `conda.cli.common.specs_from_args` instead) + * `conda_build.conda_interface.specs_from_url` (use `conda.cli.common.specs_from_url` instead) + * `conda_build.conda_interface.StringIO` (use `io.StringIO` instead) + * `conda_build.conda_interface.subdir` (use `conda.base.context.context.subdir` instead) + * `conda_build.conda_interface.symlink_conda` + * `conda_build.conda_interface.TemporaryDirectory` (use `conda.gateways.disk.create.TemporaryDirectory` instead) + * `conda_build.conda_interface.TmpDownload` (use `conda.gateways.connection.download.TmpDownload` instead) + * `conda_build.conda_interface._toposort` (use `conda.common.toposort._toposort` instead) + * `conda_build.conda_interface.unix_path_to_win` (use `conda.utils.unix_path_to_win` instead) + * `conda_build.conda_interface.untracked` (use `conda.misc.untracked` instead) + * `conda_build.conda_interface.Unsatisfiable` (use `conda.exceptions.UnsatisfiableError` instead) + * `conda_build.conda_interface.UnsatisfiableError` (use `conda.exceptions.UnsatisfiableError` instead) + * `conda_build.conda_interface.url_path` (use `conda.utils.url_path` instead) + * `conda_build.conda_interface.VersionOrder` (use `conda.models.version.VersionOrder` instead) + * `conda_build.conda_interface.walk_prefix` (use `conda.misc.walk_prefix` instead) + * `conda_build.conda_interface.win_path_to_unix` (use `conda.common.path.win_path_to_unix` instead) + * `conda_build.index.channel_data`; `conda_build.index.get_build_index` return value for `channel_data` is now always `None` + * `conda_build.utils._convert_lists_to_sets` (use `frozendict.deepfreeze` instead) + * `conda_build.utils.HashableDict` (use `frozendict.deepfreeze` instead) + * `conda_build.utils.represent_hashabledict` (use `frozendict.deepfreeze` instead) + * `conda_build.utils.rm_rf(config)` + * `conda_build.variants.get_vars(loop_only)` + +### Docs + +* + +### Other + +*