agent's converted script failed in CI with a missing display dependency error
Fixes an agent's converted script failing in CI with a missing display dependency: notebooks import display helpers that have no place in headless scripts. Strip or guard display imports on conversion. For agent builders.
TL;DR
Notebooks freely import IPython.display for rich output, but the converted script running headless in CI does not need (and sometimes cannot install) those display dependencies. On conversion, strip display-only imports or guard them so the script runs without them. Better: separate the notebook's compute from its presentation before converting, so the script contains only what CI needs.
agent's converted script failed in CI with a missing display dependency errorUse this when
- A notebook-converted script fails in CI importing display helpers.
- The notebook runs fine interactively.
- CI is headless/minimal by design.
Not for this skill when
- The script fails on real logic imports (pandas, numpy). Install those.
- The notebook itself fails in CI. That is an env problem.
Steps
- Find the display imports in the converted script. Verify: you know which lines CI chokes on.
- Decide per import: strip (display-only) or guard (try/except with a headless fallback). Verify: the script has no hard display dependency.
- Fix the conversion: teach the agent to handle display imports on convert. Verify: fresh conversions are CI-clean.
- Run the script in a CI-like container locally. Verify: it passes without display packages.
- Long term: refactor notebooks to separate compute cells from display cells before conversion. Verify: the script is pure compute.
Variant phrasings
converted script display import CI
Short form. Strip or guard display imports.
nbconvert script fails CI ipython display
The stack phrasing. Headless has no display.
notebook to script CI missing dependency
General phrasing. Convert for CI, not for the notebook.
Compatibility: nbconvert script exporter, any CI. The headless constraint is environmental.
Why it happens
The notebook UI makes display imports feel free: from IPython.display import HTML works everywhere Jupyter runs. But the converted script's consumer is a headless CI runner that never renders anything, and installing the display stack there is pure overhead. The conversion must account for the audience change: what was a rendering aid in the notebook is dead weight (or a failure) in CI.
Edge cases / pitfalls
- Guarding with try/except hides real import errors too. Prefer stripping known display-only imports.
- Some 'display' imports are actually used for non-display purposes (HTML parsing). Check usage before stripping.
- The CI env should still install the real deps. Only the display-only ones get stripped.
- Test the converted script in CI on every notebook change. Conversion drift is silent.
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_qUbu8jCiaN3yK1MPbm-v3A