slint-ui/slint · error
not found, needed by
Error message
${tool} not found, needed by: ${features} What it means
check_tools in scripts/build-demo-images.py verifies that the flash/converter tool required by each selected board kind (from the CONVERTERS mapping) is available via shutil.which. If one or more tools are missing, it warns '<tool> not found, needed by: <features>' for each and aborts the whole run with a non-zero exit before building anything. This is a deliberate pre-flight gate so builds fail early with an actionable message.
Solutions
- Install the named tool and ensure it is on PATH (verify with which <tool>)
- Re-run with --only <features> to select only boards whose tools you have
- Fix PATH in the script's environment (CI: add tool install step)
- Check CONVERTERS mapping matches the tool name actually installed
Example fix
# before python3 scripts/build-demo-images.py # aborting: install the missing tools, or narrow the run with --only # after python3 scripts/build-demo-images.py --only esp32-s3-team-industrial-solution-board
Defensive patterns
Strategy: validation
Validate before calling
import shutil
missing = [t for t in set(CONVERTERS.values()) if t and not shutil.which(t)]
if missing:
raise SystemExit(f"missing tools: {missing}; install them or use --only") Prevention
- Install all CONVERTERS tools in your dev image / CI container
- Run the script with --only for the boards you can actually build
- Add a pre-flight tool check to CI before the build job
- Keep tool installation documented in the repo README
When it happens
Trigger: Running scripts/build-demo-images.py (without --only narrowing) on a machine where a required tool such as a probe/flasher or image converter for a selected board kind is not installed or not on PATH.
Common situations: Fresh CI container or new dev machine missing the vendor flashing tools; tool installed via a version manager whose bin dir is not on PATH in the script's environment; requesting boards whose converter was never installed because only one target was needed.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
Related errors
- failed: exited with
- failed ( )
- demos.json is incomplete, these boards failed to build
- failed to install the rustls crypto provider
- home-automation ESP32-P4 failed
AI-assisted analysis of slint-ui/slint@bb937076de (2026-09-16).
Data as JSON: /api/errors/e004e8c25665db7e.
Report an issue: GitHub.
Appendix: source
Thrown at scripts/build-demo-images.py:212
env["PATH"] = os.pathsep.join(
entry for entry in env["PATH"].split(os.pathsep) if entry != uv_bin
)
return env
def check_tools(boards: list[Board]) -> None:
"""Abort before any build if a conversion tool the selected boards need is missing.
The shell version warned here and then died mid-run, after minutes of cargo builds.
"""
needed: dict[str, list[str]] = {}
for board in boards:
tool = CONVERTERS[board.kind]
if tool and not shutil.which(tool):
needed.setdefault(tool, []).append(board.feature)
if needed:
for tool, features in needed.items():
warn(f"{tool} not found, needed by: {', '.join(features)}")
sys.exit("aborting: install the missing tools, or narrow the run with --only")
def build_board(board: Board, out: Path) -> None:
log(f"printerdemo_mcu: {board.feature} ({board.kind} / {board.target})")
cargo = ["cargo"]
env = build_env()
if board.kind == "esp":
cargo += ["+esp"]
elif board.kind == "stm":
# STM keeps Slint's textures in external OSPI flash (.slint_assets); otherwise
# rodata overflows the internal flash. Only the stm32* boards define it.
env = build_env(SLINT_ASSET_SECTION=".slint_assets")
cargo += [
"build",
"--manifest-path",
"demos/Cargo.toml",
"-p",View on GitHub (pinned to bb937076de)