{"record":{"id":"2a8260f447b20f86","repo":"apache/beam","slug":"interactive-runner-not-available-please-install-apache-beam","errorCode":null,"errorMessage":"Interactive runner not available, please install apache_beam[interactive]","messagePattern":"Interactive runner not available, please install apache_beam\\[interactive\\]","errorType":"exception","errorClass":"ImportError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/runners/runner.py","lineNumber":91,"sourceCode":"\n  # Get the qualified runner name by using the lower case runner name. If that\n  # fails try appending the name with 'runner' and check if it matches.\n  # If that also fails, use the given runner name as is.\n  runner_name = _RUNNER_MAP.get(\n      runner_name.lower(),\n      _RUNNER_MAP.get(runner_name.lower() + 'runner', runner_name))\n\n  if '.' in runner_name:\n    module, runner = runner_name.rsplit('.', 1)\n    try:\n      return getattr(importlib.import_module(module), runner)()\n    except ImportError:\n      if 'dataflow' in runner_name.lower():\n        raise ImportError(\n            'Google Cloud Dataflow runner not available, '\n            'please install apache_beam[gcp]')\n      elif 'interactive' in runner_name.lower():\n        raise ImportError(\n            'Interactive runner not available, '\n            'please install apache_beam[interactive]')\n      else:\n        raise\n  else:\n    raise ValueError(\n        'Unexpected pipeline runner: %s. Valid values are %s '\n        'or the fully qualified name of a PipelineRunner subclass.' %\n        (runner_name, ', '.join(StandardOptions.KNOWN_RUNNER_NAMES)))\n\n\nclass PipelineRunner(object):\n  \"\"\"A runner of a pipeline object.\n\n  The base runner provides a run() method for visiting every node in the\n  pipeline's DAG and executing the transforms computing the PValue in the node.\n\n  A custom runner will typically provide implementations for some of the","sourceCodeStart":73,"sourceCodeEnd":109,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/runners/runner.py#L73-L109","documentation":"apache_beam.runners.create_runner() resolves a runner by name and imports its module. When the import fails with ImportError and the requested name contains 'interactive', it re-raises with this message telling the user to install the interactive extras. The interactive runner is not shipped with the base apache_beam package.","triggerScenarios":"Calling create_runner('InteractiveRunner') (or any name containing 'interactive', case-insensitive) without apache_beam[interactive] installed, so the deferred import of the interactive runner module raises ImportError.","commonSituations":"Running pipelines with beam interactive (notebook) workflows in a slim environment; CI containers installed only apache_beam without extras; a typo'd or misspelled runner name accidentally containing 'interactive'.","solutions":["Install the extras: pip install 'apache_beam[interactive]'","If you meant a different runner, pass a valid runner name or a PipelineRunner subclass per StandardOptions.KNOWN_RUNNER_NAMES","Verify the installed apache_beam version supports the interactive runner"],"exampleFix":"// before\nrunner = create_runner('InteractiveRunner')\n// after\n# pip install 'apache_beam[interactive]'\nrunner = create_runner('InteractiveRunner')","handlingStrategy":"fallback","validationCode":"try:\n    import apache_beam.runners.interactive\n    HAS_INTERACTIVE = True\nexcept ImportError:\n    HAS_INTERACTIVE = False","typeGuard":null,"tryCatchPattern":"try:\n    runner = create_runner('InteractiveRunner')\nexcept ImportError as e:\n    if 'interactive' in str(e).lower():\n        runner = create_runner('DirectRunner')  # fallback\n    else:\n        raise","preventionTips":["Install apache_beam with the [interactive] extra in all environments used for notebooks","Document extras requirements in requirements/setup files","Validate runner name early at pipeline construction"],"tags":["apache-beam","python","import-error","missing-dependency"],"backgroundTag":"missing-optional-dependency","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T21:17:11.552Z"}