ErrLookup › Background articles › "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries
"not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries
Missing-dependency errors — messages like "The onnxruntime python package is not installed. Please install it with `pip install onnxruntime`", "no suitable markdown gem found", or "Bootstrap's tooltips require Popper" — are raised when a library reaches a code path that needs an optional or external dependency the current environment doesn't provide. This article explains the mechanisms behind the family and how to fix and prevent it across ecosystems.
Distilled from 106 documented records across 34 repositories.
Background
This family covers a single design pattern implemented dozens of times: a library keeps a heavy, platform-specific, or optional dependency out of its core install, then checks for it at the moment it is actually needed. When the check fails, the library converts a raw ImportError, LoadError, MODULE_NOT_FOUND, or undefined-global error into a message that names the missing piece and usually the exact install command. Python libraries like Chroma, LiteLLM, and MLflow dominate the family: Chroma's embedding functions lazily import onnxruntime, open_clip, torch, PIL, tqdm, ollama, and openai inside __init__ and wrap each ImportError in a ValueError with a pip hint; LiteLLM does the same for prometheus_client, aws_sdk_bedrock_runtime, petals, google-cloud-aiplatform, and the paid litellm-enterprise wheel; MLflow guards ragas, zstandard, and tensorflow behind MlflowExceptions with install instructions.
Because the import is deferred, the failure is also deferred — and that timing is the family's most important variable. Chroma's CohereEmbeddingFunction and the constructor succeeds and only the first embedding call (the first await ef.generate([...]) or collection.add with documents) blows up. Bootstrap's Tooltip is the opposite extreme: the constructor checks the Popper namespace before calling super(), so new bootstrap.Tooltip(el) itself fails, while its Dropdown sibling only fails when a menu is first shown. At the far end of the spectrum, some members degrade gracefully instead of failing: oh-my-codex downgrades a detached tmux launch to a direct launch with a warning, and claude-mem's dependency preflight starts the worker anyway but marks the setup 'degraded' and names the broken pieces.
Not every member is about a missing package from a registry. GitHub::Markup ships no Markdown renderer at all and walks a list of gems (commonmarker, github/markdown, redcarpet, ...) with require, raising LoadError 'no suitable markdown gem found' only when every require fails. Bootstrap's standalone UMD build expects a window.Popper global, so a missing script tag, a CDN 404, or a bundler config marking @popperjs/core external produces the same failure shape as an uninstall. deepagents requires the git executable on PATH (checked with shutil.which) rather than any npm module; pghero requires the pg_query gem only when the filter_data config flag is enabled. And some errors are about the right package being installed in the wrong place: a different virtualenv, a different notebook kernel, a pruned Docker image, or a bundler group excluded with --without all make an installed dependency invisible at runtime.
A recurring sub-theme is that seeing the error often means the dependency was removed rather than never added: a resolver conflict uninstalled pillow, a pip resolver dropped tqdm, an image was built with --no-deps or --omit=optional, onnxruntime was replaced by onnxruntime-gpu (both register the same import name and cannot coexist), or an upgrade to Astro made @astrojs/markdown-remark a no-longer-default dependency. The error message is the library's contract: it tells you what it looked for and how to provide it, and in several cases (maigret, MLflow's zstd handler, Chroma's ValueErrors) it also embeds the original underlying error so you can distinguish a true absence from a broken install.
Common causes
- Optional dependency never installed. The library ships the integration code but not the SDK it wraps — chromadb without cohere-ai or ollama, litellm without prometheus-client, MLflow without ragas or zstandard. The core install works until you first touch the feature that needs it.
- Installed into the wrong environment. pip install succeeded, but in a different venv, notebook kernel, or interpreter than the one running the app. Verify inside the failing process: python -m pip show <pkg> or python -c "import <pkg>" with the exact interpreter.
- Pruned or partial installs. Docker images built with --no-deps or npm installs with --omit=optional / --production flags, or pnpm prune, strip packages the library requires at runtime. AnythingLLM's @vscode/ripgrep and litellm's prometheus-client are typical casualties.
- Resolver conflicts removing a dependency later. A conflicting pin (onnxruntime vs onnxruntime-gpu, aggressive pillow pins, grpcio/protobuf conflicts) uninstalls or breaks a package that previously imported fine. The original ImportError is often embedded in the message — read the 'Got error:' suffix.
- Script-tag and bundler setups skipping a peer. Bootstrap's UMD build keeps Popper external and expects window.Popper, so a missing script tag, a CDN 404 or ad-blocker, or a bundler marking @popperjs/core external breaks tooltips and dropdowns. The bundle build (bootstrap.bundle.js) and npm/ESM usage are immune.
- Excluded dependency groups. A gem placed in a bundler group excluded with --without (GitHub::Markup's markdown backend in a :development group) or a dependency that never made it into the container's lockfile is invisible at runtime even though the manifest looks correct.
- Missing system executables. Some members depend on binaries, not packages: deepagents needs git on PATH, oh-my-codex needs a spawnable tmux, caveman's build needs every declared dependency resolvable in node_modules. Slim container images frequently omit these.
What usually fixes it
- [object Object]
- [object Object]
- [object Object]
- [object Object]
- [object Object]
Documented occurrences
- Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/) (twbs/bootstrap)
- no suitable markdown gem found (github/markup)
- No Spree gems detected in Gemfile.lock. Confirm the project has `gem "spree"` (or `spree_core`/`spree_admin`) in its Gemfile. (spree/spree)
- caveman build: unresolved package dependency ${JSON.stringify(dependency)} (JuliusBrussee/caveman)
- vertexai import failed please run `pip install -U "google-cloud-aiplatform>=1.38"`. Got error: {e} (BerriAI/litellm)
- @vscode/ripgrep not installed (Mintplex-Labs/anything-llm)
- The onnxruntime python package is not installed. Please install it with `pip install onnxruntime` (chroma-core/chroma)
- pipx is required to install {} but was not found. {instructions} (jdx/mise)
- The open_clip python package is not installed. Please install it with `pip install open-clip-torch`. https://github.com/mlfoundations/open_clip (chroma-core/chroma)
- Please install the cohere-ai package to use the CohereEmbeddingFunction, `npm install -S cohere-ai` (chroma-core/chroma)
- The ollama python package is not installed. Please install it with `pip install ollama` (chroma-core/chroma)
- The torch python package is not installed. Please install it with `pip install torch` (chroma-core/chroma)
- Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/) (twbs/bootstrap)
- `markdown.remarkPlugins`, `markdown.rehypePlugins`, and `markdown.remarkRehype` run on the `unified` processor from `@astrojs/markdown-remark`, which is no longer installed by default now that Sätteri is the default Markdown processor. Install it with: npm install @astrojs/markdown-remark (withastro/astro)
- The openai python package is not installed. Please install it with `pip install openai` (chroma-core/chroma)
- Missing required dependency while starting Maigret. If installed from PyPI: pip install -U maigret If running from a cloned repository: pip install -e . Then run Maigret as: python -m maigret <username> (soxoj/maigret)
- INVALID_PARAMETER_VALUE: RAGAS metrics require the 'ragas' package. Please install it with: pip install ragas (mlflow/mlflow)
- Importing torch, transformers, petals failed Try pip installing petals pip install git+https://github.com/bigscience-workshop/petals (BerriAI/litellm)
- The PIL python package is not installed. Please install it with `pip install pillow` (chroma-core/chroma)
- --liveness requires Playwright with Chromium (run "npx playwright install chromium"): ${err.message} (santifer/career-ops)
…and 86 more across the corpus — use search.
Honest provenance: generated on 2026-08-29 from AI-assisted analysis of the linked records. See how records are made.