jdx/mise · error
pipx was found during dependency validation but could not…
Error message
pipx was found during dependency validation but could not be launched while installing {}.
Verify the configured executable with `mise which pipx` and `pipx --version`. If pipx is unavailable, reinstall it with `mise use pipx@latest`. What it means
install_version_ detects that launching pipx failed with a NotFound I/O error after pipx had passed the earlier dependency-validation check, i.e. pipx was discoverable during validation but its configured executable could not actually be spawned. The backend wraps this inconsistency in a diagnostic message instead of surfacing the raw error.
Solutions
- Reinstall pipx: `mise use pipx@latest`
- Check the configured executable with `mise which pipx` and run `pipx --version` to confirm it launches
- Fix the underlying interpreter if the shebang/venv is broken (recreate the venv or reinstall Python)
- Install uv (`mise use uv@latest`) to bypass the pipx spawn path entirely
Defensive patterns
Strategy: validation
Validate before calling
// verify pipx actually launches, not just that it resolves
const out = await $`pipx --version`.nothrow();
if (out.exitCode !== 0) throw new Error("pipx found but not launchable; reinstall with mise use pipx@latest"); Try / catch
try { await $`mise install pipx:ruff` } catch (e) {
if (/could not be launched/.test(e.message)) { await $`mise use pipx@latest`; await $`mise install pipx:ruff`; }
else throw e;
} Prevention
- After Python upgrades, recreate the venv backing pipx or reinstall pipx
- Check pipx shebangs point to an existing interpreter
- Run `pipx --version` in health checks; discovery alone doesn't prove launchability
When it happens
Trigger: During install, spawning the pipx process yields std::io::ErrorKind::NotFound anywhere in the error chain (checked via downcast) — e.g. the configured pipx path vanished, its interpreter shebang points to a missing Python, or PATH changed between validation and spawn.
Common situations: pipx shim/script whose shebang references a deleted or upgraded-away Python interpreter; broken pipx install (missing venv); mise's pipx executable configuration pointing to a stale path; PATH differences inside mise vs. shell.
Related errors
- has no uv dependency graph; run `mise lock
- pipx was found during dependency validation but could not…
- . If pipx is already installed, verify it with `mise which…
- .\n\n \n\nIf pipx is already installed, verify it with…
- semantic options (`with`, `expose`, and…
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/898a4f41e2c516af.
Report an issue: GitHub.
Appendix: source
Thrown at src/backend/pipx.rs:696
&["install", &package_request],
self,
&tv,
&ctx.ts,
ctx.pr.as_ref(),
)
.await?;
cmd = cmd.args(Self::pip_uploaded_prior_to_args(ctx.before_date));
if let Some(args) = options.pipx_args() {
cmd = cmd.args(shell_words::split(args)?);
}
if let Err(err) = cmd.execute() {
let not_found = err.chain().any(|cause| {
cause
.downcast_ref::<std::io::Error>()
.is_some_and(|io| io.kind() == std::io::ErrorKind::NotFound)
});
if not_found {
bail!(
"pipx was found during dependency validation but could not be launched while installing {}.\n\nVerify the configured executable with `mise which pipx` and `pipx --version`. If pipx is unavailable, reinstall it with `mise use pipx@latest`.",
self.ba()
);
}
return Err(err);
}
}
// Fix venv Python symlink to use minor version path
// This allows patch upgrades (3.12.1 → 3.12.2) to work without reinstalling
let pkg_name = self.tool_name();
fix_venv_python_symlink(&tv.install_path(), &pkg_name)?;
Ok(tv)
}
fn resolve_lockfile_options(
&self,View on GitHub (pinned to 533346cc37)