Skip to content
Snippets Groups Projects

app_manager: Use more efficient uv cli instead of pip

3 unresolved threads
+ 16
5
@@ -71,11 +71,25 @@ class AppEnvBuilder(EnvBuilder):
self.context = context
self.run_bootstrap_deps()
self.run_pip("install", "--upgrade", "pip", "setuptools", "wheel")
def run_bootstrap_deps(self, *args, capture_output=False):
"""Install the necessary dependencies to run pip/uv."""
return self.run_command(
[self.context.env_exe, "-m", "pip", "install", "uv"],
capture_output=capture_output,
)
def run_pip(self, *args, capture_output=False):
cmd = [self.context.env_exe, "-m", "pip", *args]
"""Execute pip command through the uv cli."""
return self.run_command(
[self.context.env_exe, "-m", "uv", "pip", *args],
capture_output=capture_output,
)
def run_command(self, cmd: List[str], capture_output=False):
"""Actually execute the cmd."""
return subprocess.run(cmd, capture_output=capture_output, check=True)
@@ -101,11 +115,8 @@ def generate_requirements_frozen(app: str, absolute_apps_dirpath: Path) -> None:
with tempfile.TemporaryDirectory(prefix=app) as envdir:
builder = AppEnvBuilder.bootstrap_venv(envdir)
builder.run_pip("install", "-r", str(src_req_file))
freeze_output = builder.run_pip("freeze", capture_output=True)
with tempfile.NamedTemporaryFile(mode="wb", dir=app_dir, delete=False) as f:
f.write(freeze_output.stdout)
builder.run_pip("compile", str(src_req_file), "-o", f.name)
p = Path(f.name)
p.chmod(0o644)
p.rename(dst_req_file)
Loading