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

  1. Reinstall pipx: `mise use pipx@latest`
  2. Check the configured executable with `mise which pipx` and run `pipx --version` to confirm it launches
  3. Fix the underlying interpreter if the shebang/venv is broken (recreate the venv or reinstall Python)
  4. 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

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


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)