{"record":{"id":"e205745971488e72","repo":"apache/beam","slug":"a-non-standard-version-of-beam-sdk-detected-s-dataflow","errorCode":null,"errorMessage":"A non-standard version of Beam SDK detected: %s. Dataflow runner will use container image tag %s. This use case is not supported.","messagePattern":"A non-standard version of Beam SDK detected: (.+?)\\. Dataflow runner will use container image tag (.+?)\\. This use case is not supported\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"sdks/python/apache_beam/runners/dataflow/internal/apiclient.py","lineNumber":1202,"sourceCode":"  dist_update_proto.update({\"sum\": distribution_update.sum})\n  # DataflowDistributionCounter needs to translate histogram\n  if isinstance(distribution_update, DataflowDistributionCounter):\n    histogram = Histogram()\n    distribution_update.translate_to_histogram(histogram)\n    dist_update_proto.update({\"firstBucketOffset\": histogram.firstBucketOffset})\n    dist_update_proto.update({\"bucketCounts\": histogram.bucketCounts})\n  metric_update_proto.distribution = dist_update_proto\n\n\n# TODO: Used in legacy batch worker. Delete after Dataflow Portable Runner transition.\ndef translate_value(value, metric_update_proto: dataflow.MetricUpdate):\n  metric_update_proto.scalar = value\n\n\ndef _get_container_image_tag():\n  base_version = version.parse(beam_version.__version__).base_version\n  if base_version != beam_version.__version__:\n    warnings.warn(\n        \"A non-standard version of Beam SDK detected: %s. \"\n        \"Dataflow runner will use container image tag %s. \"\n        \"This use case is not supported.\" %\n        (beam_version.__version__, base_version))\n  return base_version\n\n\ndef get_container_image_from_options(pipeline_options):\n  \"\"\"For internal use only; no backwards-compatibility guarantees.\n\n    Args:\n      pipeline_options (PipelineOptions): A container for pipeline options.\n\n    Returns:\n      str: Container image for remote execution.\n  \"\"\"\n  worker_options = pipeline_options.view_as(WorkerOptions)\n  if worker_options.sdk_container_image:","sourceCodeStart":1184,"sourceCodeEnd":1220,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/runners/dataflow/internal/apiclient.py#L1184-L1220","documentation":"apache_beam emits this UserWarning when the installed Beam SDK version string is not a plain 'base' version (e.g. a dev build like '2.53.0.dev0' or a version with local suffix). The Dataflow runner normalizes it with packaging.version's base_version and will launch workers with the container image tagged with that base version, but this combination is unsupported, so it warns.","triggerScenarios":"Running a Dataflow pipeline from an SDK whose beam_version.__version__ differs from version.parse(__version__).base_version — e.g. installing from a git checkout, a nightly wheel, or a locally built/patched version string like '2.61.0.dev' or '2.61.0+local'.","commonSituations":"Developers installing Beam from source (git clone + pip install -e .), CI jobs using nightly snapshots, or locally patched SDK builds submitting jobs to real Dataflow instead of DirectRunner.","solutions":["Install an official release from PyPI: pip install apache-beam[<extras>]==<stable version> and rerun the Dataflow job.","If you must use a dev build, verify the resulting container image tag (base_version) exists on gcr.io/cloud-dataflow and pin matching runner/container versions.","Set a supported container image explicitly via pipeline_options.view_as(SetupOptions).sdk_container_image to avoid the default tag choice.","If the warning is acceptable (local experiments only), suppress it with warnings.filterwarnings('ignore', message='A non-standard version of Beam SDK detected')."],"exampleFix":"# before\npip install -e apache-beam  # dev build '2.61.0.dev0'\n# after\npip install apache-beam==2.61.0","handlingStrategy":"validation","validationCode":"import apache_beam as beam\nfrom packaging.version import Version\nv = Version(beam.__version__)\nif v.base_version != beam.__version__:\n    raise RuntimeError(f\"Non-standard Beam version {beam.__version__}; install an official release for Dataflow\")","typeGuard":"def is_official_beam_version(version_str):\n    from packaging.version import Version\n    return Version(version_str).base_version == version_str","tryCatchPattern":null,"preventionTips":["Always install Beam releases from PyPI for Dataflow jobs","Use separate virtualenvs for dev builds vs production submissions","Pin sdk_container_image explicitly when testing dev builds"],"tags":["dataflow","version-mismatch","container-image","unsupported"],"backgroundTag":"unsupported-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"}