{"record":{"id":"b1d2a6154ac2640d","repo":"pandas-dev/pandas","slug":"import-install-name-failed-extra-use-pip-c","errorCode":null,"errorMessage":"`Import {install_name}` failed. {extra} Use pip, conda, or your preferred package management tool to install the {install_name} package.","messagePattern":"`Import (.+?)` failed\\. (.+?) Use pip, conda, or your preferred package management tool to install the (.+?) package\\.","errorType":"exception","errorClass":"ImportError","httpStatus":null,"severity":"error","filePath":"pandas/compat/_optional.py","lineNumber":162,"sourceCode":"        None is returned when the package is not found and `errors`\n        is False, or when the package's version is too old and `errors`\n        is ``'warn'`` or ``'ignore'``.\n    \"\"\"\n    assert errors in {\"warn\", \"raise\", \"ignore\"}\n\n    package_name = INSTALL_MAPPING.get(name)\n    install_name = package_name if package_name is not None else name\n\n    msg = (\n        f\"`Import {install_name}` failed. {extra} \"\n        f\"Use pip, conda, or your preferred package management tool \"\n        f\"to install the {install_name} package.\"\n    )\n    try:\n        module = importlib.import_module(name)\n    except ImportError as err:\n        if errors == \"raise\":\n            raise ImportError(msg) from err\n        return None\n\n    # Handle submodules: if we have submodule, grab parent module from sys.modules\n    parent = name.split(\".\", maxsplit=1)[0]\n    if parent != name:\n        install_name = parent\n        module_to_get = sys.modules[install_name]\n    else:\n        module_to_get = module\n    minimum_version = min_version if min_version is not None else VERSIONS.get(parent)\n    if minimum_version:\n        version = get_version(module_to_get)\n        if version and Version(version) < Version(minimum_version):\n            msg = (\n                f\"Pandas requires version '{minimum_version}' or newer of '{parent}' \"\n                f\"(version '{version}' currently installed).\"\n            )\n            if errors == \"warn\":","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/pandas-dev/pandas/blob/71959b8cb9b2459c16e14b34f28b178ccfe14735/pandas/compat/_optional.py#L144-L180","documentation":"Raised by import_optional_dependency (compat/_optional.py:107-163) when errors='raise' (the default) and the optional dependency cannot be imported via importlib.import_module. The message includes the `extra` hint string passed by the caller and instructs the user to install the package (mapping import names to PyPI names via INSTALL_MAPPING, e.g. 'bs4'->'beautifulsoup4').","triggerScenarios":"pandas internally calls import_optional_dependency('pyarrow', 'pyarrow is required for ...') when you use parquet/or Arrow-backed dtypes without pyarrow installed. Same path fires for read_html's lxml/bs4, read_excel's openpyxl/odf, HDFStore's tables, SQL's sqlalchemy, etc. Passing errors='warn' or 'ignore' returns None instead.","commonSituations":"Using a pandas I/O function (to_parquet, read_html, read_excel with a non-xlsx engine, to_sql, HDFStore) in an environment where the optional backend isn't installed; CI with a slim pandas install missing extras; a fresh virtualenv with only pandas.","solutions":["Install the named package: pip install <install_name> (the error gives the correct PyPI name).","If you can't install it, use errors='ignore' when calling import_optional_dependency yourself (pandas-internal callers don't expose this, so use a different engine/format).","For I/O, switch to a built-in engine/format (e.g. read_excel engine='openpyxl' is also optional; use to_csv/to_pickle which need no optional deps).","Add the relevant pandas extra: pip install 'pandas[parquet]' or 'pandas[html]'."],"exampleFix":"# before — AttributeError/ImportError on to_parquet\ndf.to_parquet('out.parquet')  # pyarrow/fastparquet missing\n\n# after\n# shell: pip install pyarrow\ndf.to_parquet('out.parquet')","handlingStrategy":"fallback","validationCode":"from pandas.compat._optional import import_optional_dependency\nmod = import_optional_dependency('pyarrow', errors='ignore')\nif mod is None:\n    # feature unavailable — use a fallback path/engine\n    use_arrow = False","typeGuard":null,"tryCatchPattern":"try:\n    import_optional_dependency('pyarrow', 'pyarrow is required for Arrow dtypes')\n    HAS_PYARROW = True\nexcept ImportError:\n    HAS_PYARROW = False","preventionTips":["Install pandas extras for the features you use: pip install 'pandas[parquet]'.","Gate optional-backend features behind an import check in your code.","Document required optional deps in your project's requirements."],"tags":["compat","dependencies","import","optional-dependency","importerror"],"analyzedSha":"71959b8cb9b2459c16e14b34f28b178ccfe14735","analyzedAt":"2026-08-07T01:30:20.476Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}