{"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/3b7651241d4da534b3559b60ef128e1c34f54116/pandas/compat/_optional.py#L144-L180","documentation":"Raised by `import_optional_dependency` when an optional dependency module cannot be imported and `errors='raise'` (the default). pandas wraps the underlying ImportError with a friendly install hint naming the pip/conda package. The `{install_name}` reflects INSTALL_MAPPING (e.g. 'lxml.etree' -> 'lxml', 'tables' -> 'pytables').","triggerScenarios":"Calling `pd.read_html(url)` without lxml/bs4 installed; `pd.read_excel` without openpyxl; `to_sql` without SQLAlchemy; any code path that internally invokes `import_optional_dependency(name, errors='raise')` for a missing package.","commonSituations":"Fresh environment without optional extras; CI images trimmed to minimal deps; users who installed only `pandas` and not `pandas[all]`.","solutions":["Install the named package: `pip install <install_name>` or `conda install <install_name>`.","Install pandas with the relevant extra: `pip install 'pandas[performance]'` or `'pandas[html]'`.","Pass `errors='warn'` or `errors='ignore'` if your code path is optional and should degrade gracefully."],"exampleFix":"// before\npd.read_html('https://example.com/table')  # lxml not installed\n\n// after\npip install lxml\npd.read_html('https://example.com/table')","handlingStrategy":"fallback","validationCode":"import importlib.util\nis_installed = importlib.util.find_spec(name) is not None","typeGuard":null,"tryCatchPattern":"try:\n    from pandas.compat._optional import import_optional_dependency\n    mod = import_optional_dependency(name, errors='warn')\nexcept ImportError:\n    mod = None  # degrade gracefully","preventionTips":["Install pandas with the relevant extras (performance, html, excel, etc.).","Use errors='warn' or 'ignore' when the dependency is truly optional to your code path."],"tags":["dependencies","import-error","optional-deps"],"backgroundTag":null,"analyzedSha":"3b7651241d4da534b3559b60ef128e1c34f54116","analyzedAt":"2026-08-11T22:10:44.015Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}