From 8a738e56c964197a0c27b40016ba7c0b203e4b70 Mon Sep 17 00:00:00 2001 From: Zoran Simic Date: Mon, 31 Mar 2025 14:39:13 -0700 Subject: [PATCH] Control when `uv venv --seed` is used --- src/pickley/__init__.py | 6 ++++-- src/pickley/package.py | 10 ++++++---- tests/test_describe.py | 3 ++- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/pickley/__init__.py b/src/pickley/__init__.py index 3e56201..6f5c15e 100644 --- a/src/pickley/__init__.py +++ b/src/pickley/__init__.py @@ -240,14 +240,16 @@ def resolve(self, settings: "TrackedSettings"): venv.logger = self.logger venv.create_venv() bake_time = runez.to_int(CFG.get_value("bake_time", package_name=canonical_name)) + env = None if bake_time: # uv allows to exclude newer packages, but pip does not # This can fail if project is new (bake time did not elapse yet since project release) LOG.debug("Applying bake_time of %s", runez.represented_duration(bake_time)) ago = time.strftime("%Y-%m-%d %H:%M:%SZ", time.gmtime(time.time() - bake_time)) - os.environ["UV_EXCLUDE_NEWER"] = ago + env = dict(os.environ) + env["UV_EXCLUDE_NEWER"] = ago - r = venv.pip_install(pip_spec, no_deps=True, quiet=True, fatal=False) + r = venv.pip_install(pip_spec, no_deps=True, quiet=True, fatal=False, env=env) if r.failed: lines = r.full_output.strip().splitlines() if lines: diff --git a/src/pickley/package.py b/src/pickley/package.py index 5b49682..a6ba0db 100644 --- a/src/pickley/package.py +++ b/src/pickley/package.py @@ -50,7 +50,9 @@ def create_venv(self): def create_venv_with_uv(self): uv_path = CFG.uv_bootstrap.uv_path seed = "--seed" if self.settings.uv_seed else None - r = runez.run(uv_path, "-q", "venv", seed, "-p", self.settings.python_executable, self.folder, logger=self.logger) + env = dict(os.environ) + env.pop("UV_VENV_SEED", None) # We explicitly state `--seed` if/when needed + r = runez.run(uv_path, "-q", "venv", seed, "-p", self.settings.python_executable, self.folder, logger=self.logger, env=env) if self.groom_uv_venv: venv_python = self.folder / "bin/python" if venv_python.is_symlink(): @@ -74,7 +76,7 @@ def create_venv_with_pip(self): runez.run(self.settings.python_executable, "-mvenv", self.folder, logger=self.logger) return self._run_py_pip("install", "-U", *bstrap.pip_auto_upgrade()) - def pip_install(self, *args, fatal=True, no_deps=False, quiet=None): + def pip_install(self, *args, fatal=True, no_deps=False, quiet=None, env=None): """`pip install` into target venv`""" cmd = list(self._auto_quiet_args("install", no_deps and "--no-deps", quiet=quiet)) if quiet is True: @@ -84,9 +86,9 @@ def pip_install(self, *args, fatal=True, no_deps=False, quiet=None): passthrough = quiet is False or "-q" not in cmd if self.use_pip: - return self._run_py_pip(*cmd, *args, fatal=fatal, passthrough=passthrough) + return self._run_py_pip(*cmd, *args, fatal=fatal, passthrough=passthrough, env=env) - return self._run_uv(*cmd, *args, fatal=fatal, passthrough=passthrough) + return self._run_uv(*cmd, *args, fatal=fatal, passthrough=passthrough, env=env) def run_pip(self, command, *args, **kwargs): """Run `pip` command, this only works for commands that are common between `pip` and `uv`""" diff --git a/tests/test_describe.py b/tests/test_describe.py index d485996..1972bd8 100644 --- a/tests/test_describe.py +++ b/tests/test_describe.py @@ -3,7 +3,8 @@ import runez -def test_describe(cli): +def test_describe(cli, monkeypatch): + monkeypatch.setenv("UV_VENV_SEED", "1") cli.run("describe pickley==1.0") assert cli.succeeded assert "pickley: version 1.0 (pinned)\n" in cli.logged.stdout