{"record":{"id":"46e474fb6e6925ac","repo":"pandas-dev/pandas","slug":"pyarrow-pyarrow-min-version-is-required-for-pya","errorCode":null,"errorMessage":"pyarrow>={PYARROW_MIN_VERSION} is required for PyArrow backed ArrowExtensionArray.","messagePattern":"pyarrow>=(.+?) is required for PyArrow backed ArrowExtensionArray\\.","errorType":"exception","errorClass":"ImportError","httpStatus":null,"severity":"critical","filePath":"pandas/core/arrays/arrow/array.py","lineNumber":389,"sourceCode":"\n    >>> pd.array([1, 1, None], dtype=\"int64[pyarrow]\")\n    <ArrowExtensionArray>\n    [1, 1, <NA>]\n    Length: 3, dtype: int64[pyarrow]\n    \"\"\"  # noqa: E501 (http link too long)\n\n    _pa_array: pa.ChunkedArray\n    _dtype: ArrowDtype\n    # results from calls to methods decorated with cache_readonly get added here\n    _cache: dict[str, pa.ChunkedArray]\n\n    def __init__(self, values: pa.Array | pa.ChunkedArray) -> None:\n        if not HAS_PYARROW:\n            msg = (\n                f\"pyarrow>={PYARROW_MIN_VERSION} is required for PyArrow \"\n                \"backed ArrowExtensionArray.\"\n            )\n            raise ImportError(msg)\n        if isinstance(values, pa.Array):\n            self._pa_array = pa.chunked_array([values])\n        elif isinstance(values, pa.ChunkedArray):\n            self._pa_array = values\n        else:\n            raise ValueError(\n                f\"Unsupported type '{type(values)}' for ArrowExtensionArray\"\n            )\n        self._dtype = ArrowDtype(self._pa_array.type)\n        self._cache = {}\n\n    @classmethod\n    def _from_sequence(\n        cls, scalars, *, dtype: Dtype | None = None, copy: bool = False\n    ) -> Self:\n        \"\"\"\n        Construct a new ExtensionArray from a sequence of scalars.\n        \"\"\"","sourceCodeStart":371,"sourceCodeEnd":407,"githubUrl":"https://github.com/pandas-dev/pandas/blob/71959b8cb9b2459c16e14b34f28b178ccfe14735/pandas/core/arrays/arrow/array.py#L371-L407","documentation":"Raised by ArrowExtensionArray.__init__ when the HAS_PYARROW flag is False, i.e. pyarrow is not installed or is older than PYARROW_MIN_VERSION (currently 13.0.0 per pandas.compat.pyarrow). Any operation that materializes a pyarrow-backed extension array (e.g. pd.array(..., dtype='int64[pyarrow]')) routes through this constructor. It is an ImportError, not a ValueError, signalling a missing optional dependency.","triggerScenarios":"Constructing any ArrowExtensionArray or ArrowDtype-backed Series/array without pyarrow installed: `pd.array([1,2], dtype='int64[pyarrow]')`, `pd.Series([...], dtype='string[pyarrow]')`, `df.convert_dtypes(dtype_backend='pyarrow')`, reading a pyarrow-backed frame.","commonSituations":"Fresh environment without pyarrow, CI image missing the optional dep, downgrading/pinning pyarrow below 13.0.0, or slim Docker images that exclude optional extras. Also triggered by `pip install pandas` without `[arrow]`/pyarrow.","solutions":["Install a compatible pyarrow: `pip install 'pyarrow>=13.0.0'`.","If pyarrow is installed but old, upgrade it: `pip install -U pyarrow`.","Verify in-process: `import pyarrow as pa; print(pa.__version__)`.","If you cannot install pyarrow, avoid pyarrow dtypes (drop dtype='...[pyarrow]' and convert_dtypes(dtype_backend='pyarrow'))."],"exampleFix":"# before\nimport pandas as pd\ns = pd.array([1, 2, 3], dtype='int64[pyarrow]')  # ImportError if pyarrow missing\n# after - ensure dependency is present\n# shell: pip install 'pyarrow>=13.0.0'\nimport pyarrow as pa  # guard\ns = pd.array([1, 2, 3], dtype='int64[pyarrow]')","handlingStrategy":"validation","validationCode":"import importlib.util, packaging.version\n\ndef pyarrow_ok(min_version='13.0.0') -> bool:\n    spec = importlib.util.find_spec('pyarrow')\n    if spec is None:\n        return False\n    import pyarrow as pa\n    return packaging.version.parse(pa.__version__) >= packaging.version.parse(min_version)\n\nif not pyarrow_ok():\n    raise SystemExit('pyarrow>=13.0.0 required; pip install \"pyarrow>=13.0.0\"')\n\ns = pd.array([1,2,3], dtype='int64[pyarrow]')","typeGuard":"def has_pyarrow_backend() -> bool:\n    try:\n        import pyarrow  # noqa: F401\n        import pandas  # noqa: F401\n        from pandas.compat.pyarrow import PYARROW_MIN_VERSION\n        import pyarrow as pa\n        from packaging.version import parse\n        return parse(pa.__version__) >= parse(PYARROW_MIN_VERSION)\n    except ImportError:\n        return False","tryCatchPattern":"try:\n    s = pd.array(data, dtype='int64[pyarrow]')\nexcept ImportError as e:\n    if 'pyarrow' in str(e):\n        # fall back to numpy-backed dtype\n        s = pd.array(data, dtype='int64')\n    else:\n        raise","preventionTips":["Pin pyarrow in requirements: pyarrow>=13.0.0.","Gate pyarrow-dtype code behind a runtime capability check.","Provide a numpy-dtype fallback when pyarrow is optional.","Document pyarrow as a hard dependency in environments using ArrowDtype."],"tags":["pyarrow","dependency","environment","import-error"],"analyzedSha":"71959b8cb9b2459c16e14b34f28b178ccfe14735","analyzedAt":"2026-08-07T01:30:20.476Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}