jdx/mise · error
. If pipx is already installed, verify it with `mise which…
Error message
{reason}.
{instructions}
If pipx is already installed, verify it with `mise which pipx` and `pipx --version`. What it means
install_version_ bails when pipx is required (uv is unavailable, so the pipx path is used) but the pipx executable could not be found. The message bundles the reason with setup instructions for both uv and pipx, and asks the user to verify the configured executable with mise/pipx commands.
Solutions
- Install uv (`mise use uv@latest`) so uvx handles the install instead of pipx
- Or install pipx: `mise use pipx@latest` (or `pipx ensurepath` for an existing pipx)
- Verify with `mise which pipx` and `pipx --version`
Defensive patterns
Strategy: fallback
Validate before calling
if (!(await isInstalled("pipx")) && !(await isInstalled("uv")))
throw new Error("install pipx (mise use pipx@latest) or uv (mise use uv@latest)"); Try / catch
try { await $`mise install pipx:ruff` } catch (e) {
if (/pipx is required/.test(e.message)) { await $`mise use pipx@latest`; await $`mise install pipx:ruff`; }
else throw e;
} Prevention
- Verify `mise which pipx` and `pipx --version` in environment bootstrap
- Prefer installing uv so the pipx fallback path is never needed
- Keep pipx on PATH in CI images (or install it via mise)
When it happens
Trigger: Installing a pipx tool when uv is not spawnable and the pipx dependency check fails because no pipx executable exists (not in toolset, not on PATH).
Common situations: Fresh environment without pipx; Python/pipx removed or venv broken; PATH misconfigured in CI; user assumed uv would be used but uvx is disabled.
Related errors
- .\n\n \n\nIf pipx is already installed, verify it with…
- semantic options (`with`, `expose`, and…
- has no uv dependency graph; run `mise lock
- pipx was found during dependency validation but could not…
- pipx was found during dependency validation but could not…
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/abc968b7d099c29c.
Report an issue: GitHub.
Appendix: source
Thrown at src/backend/pipx.rs:616
// below, so it cannot pass on evidence the spawn will then reject. On Windows a
// `pipx.ps1` or a shebang-only `pipx.pyz` satisfies the plain lookup but cannot
// be launched, and it used to reach `pipx install` and die with
// "program not found" instead of these instructions.
if !pipx_available {
let pipx_configured = match self.dependency_toolset(&ctx.config).await {
Ok(ts) => ts.versions.keys().any(|ba| ba.short == "pipx"),
Err(_) => false,
};
let reason = if pipx_configured {
"pipx is configured but its executable was not found or is not runnable"
.to_string()
} else {
format!(
"pipx is required to install {} but was not found",
self.ba()
)
};
bail!(
"{reason}.\n\n{instructions}\n\nIf pipx is already installed, verify it with `mise which pipx` and `pipx --version`."
);
}
}
let request = self.tool_name().parse::<PipxRequest>()?;
if let Some(uv_program) = uv_program {
let package_request = request.uvx_request(&tv.version, &options);
self.ensure_uv_supports_expose(ctx, &options).await?;
self.warn_if_uv_may_not_support_exclude_newer(ctx).await;
ctx.pr
.set_message(format!("uv tool install {package_request}"));
let mut cmd = Self::uvx_cmd(
&uv_program,
&ctx.config,
&["tool", "install", &package_request],
self,View on GitHub (pinned to 533346cc37)