{"record":{"id":"14bd95f9a5cb7225","repo":"jdx/mise","slug":"pipx-is-required-to-install-but-was-not-found","errorCode":null,"errorMessage":"pipx is required to install {} but was not found.\n\n{instructions}","messagePattern":"pipx is required to install (.+?) but was not found\\.\n\n(.+?)","errorType":"exception","errorClass":"eyre::Report","httpStatus":null,"severity":"error","filePath":"src/backend/pipx.rs","lineNumber":337,"sourceCode":"            // bare \"No such file or directory (os error 2)\". Skipped when a configured tool\n            // provides pipx, since mise installs that first — same rule as the warning.\n            //\n            // The gate asks `spawnable_dependency`, the same question `spawn_program` asks\n            // below, so it cannot pass on evidence the spawn will then reject. On Windows a\n            // `pipx.ps1` or a shebang-only `pipx.pyz` satisfies the plain lookup but cannot\n            // be launched, and it used to reach `pipx install` and die with\n            // \"program not found\" instead of these instructions.\n            let pipx_configured = match self.dependency_toolset(&ctx.config).await {\n                Ok(ts) => ts.versions.keys().any(|ba| ba.short == \"pipx\"),\n                Err(_) => false,\n            };\n            if !pipx_configured\n                && self\n                    .spawnable_dependency(&ctx.config, Some(&ctx.ts), \"pipx\")\n                    .await\n                    .is_none()\n            {\n                bail!(\n                    \"pipx is required to install {} but was not found.\\n\\n{instructions}\",\n                    self.ba()\n                );\n            }\n        }\n\n        let request = self.tool_name().parse::<PipxRequest>()?;\n\n        if let Some(uv_program) = uv_program {\n            let package_request = request.uvx_request(&tv.version, &options);\n            self.warn_if_uv_may_not_support_exclude_newer(ctx).await;\n            ctx.pr\n                .set_message(format!(\"uv tool install {package_request}\"));\n            let mut cmd = Self::uvx_cmd(\n                &uv_program,\n                &ctx.config,\n                &[\"tool\", \"install\", &package_request],\n                self,","sourceCodeStart":319,"sourceCodeEnd":355,"githubUrl":"https://github.com/jdx/mise/blob/6f52dcdf99e282ef7a7db68c81301fa4618d0f79/src/backend/pipx.rs#L319-L355","documentation":"The pipx backend refuses to install a `pipx:` tool when it cannot find a usable pipx. mise first tries the uv/uvx branch; when uv is unavailable or disallowed (`uvx = false` on the package or the `pipx.uvx` setting), it falls back to pipx and bails if pipx is neither configured as a mise tool in the dependency toolset nor spawnable on PATH. The message embeds the install instructions (mise use pipx@latest, or mise use uv@latest when uvx is allowed).","triggerScenarios":"`mise use pipx:httpie` on a machine where pipx is not on PATH and not declared in mise.toml, while uv is also missing or uvx is disabled. On Windows a pipx.ps1 or shebang-only pipx.pyz counts as absent because it is not spawnable.","commonSituations":"Fresh CI containers, minimal Docker images, new laptops without Python tooling, or teams that set `pipx.uvx = false` globally while only installing uv.","solutions":["Add pipx as a mise-managed dependency so mise installs it first: `mise use pipx@latest` alongside the pipx: tools","Install uv instead when uvx is allowed: `mise use uv@latest` — the pipx check is skipped entirely on the uv branch","Install pipx system-wide (e.g. `pip install --user pipx` / `brew install pipx`) so spawnable_dependency finds it","Remove `uvx = false` / `pipx.uvx = false` if you actually have uv installed"],"exampleFix":"# before\n[tools]\n\"pipx:httpie\" = \"latest\"\n\n# after\n[tools]\npipx = \"latest\"\n\"pipx:httpie\" = \"latest\"","handlingStrategy":"validation","validationCode":"command -v pipx >/dev/null 2>&1 || mise ls pipx >/dev/null 2>&1 || command -v uv >/dev/null 2>&1 || echo 'need: mise use pipx@latest (or uv@latest)'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Declare pipx (or uv) as a mise tool in the same mise.toml that uses pipx: packages","In Dockerfiles, add `RUN mise use pipx@latest` before installing pipx: tools","Don't set pipx.uvx=false globally unless pipx is guaranteed present"],"tags":["dependencies","python","pipx","missing-tool","mise-toml"],"backgroundTag":"missing-dependency","analyzedSha":"6f52dcdf99e282ef7a7db68c81301fa4618d0f79","analyzedAt":"2026-08-22T10:14:23.840Z","schemaVersion":2},"datasetVersion":"2026-08-30T08:17:16.595Z"}