{"record":{"id":"fdd28e7c529dfc6c","repo":"apache/beam","slug":"this-pipeline-runs-with-the-pipeline-option-update-coder","errorCode":null,"errorMessage":"This pipeline runs with the pipeline option --update_compatibility_version=2.67.0 or earlier. When running with this option on SDKs 2.68.0 or later, you must ensure dill==0.3.1.1 is installed.. Found dill version '{dill.__version__}","messagePattern":"This pipeline runs with the pipeline option --update_compatibility_version=2\\.67\\.0 or earlier\\. When running with this option on SDKs 2\\.68\\.0 or later, you must ensure dill==0\\.3\\.1\\.1 is installed\\.\\. Found dill version '(.+?)","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/coders/coder_impl.py","lineNumber":372,"sourceCode":"DATACLASS_KW_ONLY_TYPE = 105\n\n# Types that can be encoded as iterables, but are not literally\n# lists, etc. due to being lazy.  The actual type is not preserved\n# through encoding, only the elements. This is particularly useful\n# for the value list types created in GroupByKey.\n_ITERABLE_LIKE_TYPES = set()  # type: Set[Type]\n\n\ndef _verify_dill_compat():\n  base_error = (\n      \"This pipeline runs with the pipeline option \"\n      \"--update_compatibility_version=2.67.0 or earlier. \"\n      \"When running with this option on SDKs 2.68.0 or \"\n      \"later, you must ensure dill==0.3.1.1 is installed.\")\n  if not dill:\n    raise RuntimeError(base_error + \". Dill is not installed.\")\n  if dill.__version__ != \"0.3.1.1\":\n    raise RuntimeError(base_error + f\". Found dill version '{dill.__version__}\")\n\n\nclass FastPrimitivesCoderImpl(StreamCoderImpl):\n  \"\"\"For internal use only; no backwards-compatibility guarantees.\"\"\"\n  def __init__(\n      self,\n      fallback_coder_impl,\n      requires_deterministic_step_label=None,\n      force_use_dill=False,\n      use_relative_filepaths=True):\n    self.fallback_coder_impl = fallback_coder_impl\n    self.iterable_coder_impl = IterableCoderImpl(self)\n    self.requires_deterministic_step_label = requires_deterministic_step_label\n    self.warn_deterministic_fallback = True\n    self.force_use_dill = force_use_dill\n    self.use_relative_filepaths = use_relative_filepaths\n\n  @staticmethod","sourceCodeStart":354,"sourceCodeEnd":390,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/coders/coder_impl.py#L354-L390","documentation":"Same _verify_dill_compat guard as the missing-dill case: with --update_compatibility_version=2.67.0 or earlier on SDKs 2.68.0+, Beam requires dill==0.3.1.1, and raises RuntimeError if a different dill version is found. (The rendered message interpolates the actual installed version into the f-string placeholder.)","triggerScenarios":"Running an update-compatibility pipeline (encode_type_2_67_0 / _unpickle_type_2_67_0 code path) where dill is installed but its __version__ is not '0.3.1.1' (e.g. dill 0.3.8, 0.3.1.0, or 0.4.x).","commonSituations":"pip resolving a newer dill as a transitive dependency; environment drift between the machine that wrote the pipeline and the runner; upgrading dill for another library and breaking Beam's update compatibility.","solutions":["Pin dill to exactly 0.3.1.1: `pip install dill==0.3.1.1` (check with `pip show dill`).","Add a constraints file or extra_deps flag (Beam's --extra_package/requirements) ensuring dill==0.3.1.1 on workers too.","Raise --update_compatibility_version above 2.67.0 if legacy pickles are not required, avoiding the strict dill pin."],"exampleFix":"// before\npip show dill  # Version: 0.3.8\n// after\npip install dill==0.3.1.1","handlingStrategy":"validation","validationCode":"import dill\nif dill.__version__ != '0.3.1.1':\n    raise SystemExit(f'Need dill==0.3.1.1, found {dill.__version__}')","typeGuard":null,"tryCatchPattern":"try:\n    pipeline.run().wait_until_finish()\nexcept RuntimeError as e:\n    if 'Found dill version' in str(e):\n        subprocess.run(['pip', 'install', 'dill==0.3.1.1'], check=True)","preventionTips":["Pin dill==0.3.1.1 in a constraints file so transitive upgrades cannot change it.","Run `pip check`/`pip show dill` in CI before update-migration pipelines.","Keep the authoring and runner environments on identical dill versions."],"tags":["python","dill","version-mismatch","compatibility"],"backgroundTag":"invalid-config-value","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}