From 62f37cdfddd70c957af351d67042b8e6a648fcb4 Mon Sep 17 00:00:00 2001 From: jaimergp Date: Sun, 14 Dec 2025 17:51:37 +0100 Subject: [PATCH 1/2] Use lazy PrefixData for conda update checks --- conda_libmamba_solver/solver.py | 32 ++++++-------------------------- dev/requirements.txt | 2 +- pyproject.toml | 2 +- recipe/meta.yaml | 2 +- 4 files changed, 9 insertions(+), 29 deletions(-) diff --git a/conda_libmamba_solver/solver.py b/conda_libmamba_solver/solver.py index ac2aec2c..bc7ae4a5 100644 --- a/conda_libmamba_solver/solver.py +++ b/conda_libmamba_solver/solver.py @@ -15,7 +15,6 @@ import re import sys from collections import defaultdict -from contextlib import suppress from functools import cache from inspect import stack from itertools import chain @@ -24,7 +23,6 @@ from conda import __version__ as _conda_version from conda.base.constants import ( - PREFIX_FROZEN_FILE, REPODATA_FN, UNKNOWN_CHANNEL, ChannelPriority, @@ -34,6 +32,7 @@ from conda.common.io import time_recorder from conda.common.path import paths_equal from conda.common.url import percent_decode +from conda.core.prefix_data import PrefixData from conda.core.solve import Solver from conda.exceptions import ( CondaValueError, @@ -42,7 +41,7 @@ ) from conda.models.channel import Channel from conda.models.match_spec import MatchSpec -from conda.models.records import PackageRecord, PrefixRecord +from conda.models.records import PackageRecord from conda.models.version import VersionOrder from conda.reporters import get_spinner from libmambapy.solver import Request, Solution @@ -1026,27 +1025,8 @@ def _notify_conda_outdated( # This check can be silenced with a specific option in the context or in quiet mode return - # manually check base prefix since `PrefixData(...).get("conda", None) is expensive - # once prefix data is lazy this might be a different situation - current_conda_prefix_rec = None - conda_self_installed = False - conda_frozen_file_found = os.path.exists( - os.path.join(context.root_prefix, PREFIX_FROZEN_FILE) - ) - conda_meta_prefix_directory = os.path.join(context.root_prefix, "conda-meta") - with suppress(OSError, ValueError): - if os.path.lexists(conda_meta_prefix_directory): - for entry in os.scandir(conda_meta_prefix_directory): - if entry.is_file() and entry.name.endswith(".json"): - package_name = entry.name.rsplit("-", 2)[0] - if package_name == "conda": - with open(entry.path) as f: - current_conda_prefix_rec = PrefixRecord(**json.loads(f.read())) - elif package_name == "conda-self": - conda_self_installed = True - if conda_self_installed and current_conda_prefix_rec is not None: - # conda-self is installed and current conda has been found, no more information needed - break + prefix_data = PrefixData(context.root_prefix) + current_conda_prefix_rec = prefix_data.get("conda", None) if not current_conda_prefix_rec: # We are checking whether conda can be found in the environment conda is @@ -1081,8 +1061,8 @@ def _notify_conda_outdated( if conda_newer_records: newest = max(conda_newer_records, key=lambda x: VersionOrder(x.version)) conda_update_message = f"conda update -n base -c {channel_name} conda" - if conda_frozen_file_found: - if conda_self_installed: + if prefix_data.is_frozen(): + if prefix_data.get("conda-self", None): conda_update_message = "conda self update" else: conda_update_message += " --override-frozen" diff --git a/dev/requirements.txt b/dev/requirements.txt index 9d01ce6d..0f7bb6ed 100644 --- a/dev/requirements.txt +++ b/dev/requirements.txt @@ -2,7 +2,7 @@ pip # run-time boltons>=23.0.0 -conda>=25.9 +conda>=26.1 conda-forge::libmamba>=2.0.0 conda-forge::libmambapy>=2.0.0 msgpack-python>=1.1.1 diff --git a/pyproject.toml b/pyproject.toml index abce0f15..c132bd9e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ classifiers = [ ] requires-python = ">=3.10" dependencies = [ - "conda >=25.9", + "conda >=26.1", # "libmambapy >=2", "boltons >=23.0.0", "msgpack >=1.1.1", diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 0bae1f09..84003547 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -21,7 +21,7 @@ requirements: - hatch-vcs run: - python >=3.10 - - conda >=25.9 + - conda >=26.1 - libmambapy >=2.0.0 - boltons >=23.0.0 - msgpack-python >=1.1.1 From 8fa753a942087e3099d569c09eca0a3d6e15065d Mon Sep 17 00:00:00 2001 From: jaimergp Date: Fri, 6 Feb 2026 00:01:16 +0100 Subject: [PATCH 2/2] add news --- news/817-lazy-prefixdata | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 news/817-lazy-prefixdata diff --git a/news/817-lazy-prefixdata b/news/817-lazy-prefixdata new file mode 100644 index 00000000..09471bdb --- /dev/null +++ b/news/817-lazy-prefixdata @@ -0,0 +1,19 @@ +### Enhancements + +* + +### Bug fixes + +* + +### Deprecations + +* + +### Docs + +* + +### Other + +* Use lazy `PrefixData` getter to remove custom workaround for `conda` update checks. (#784 via #817)