{"record":{"id":"e066d4edcd5eefbe","repo":"cocoindex-io/cocoindex","slug":"qdrant-client-is-required-to-use-the-qdrant-connec","errorCode":null,"errorMessage":"qdrant-client is required to use the Qdrant connector. Please install cocoindex[qdrant].","messagePattern":"qdrant-client is required to use the Qdrant connector\\. Please install cocoindex\\[qdrant\\]\\.","errorType":"exception","errorClass":"ImportError","httpStatus":null,"severity":"error","filePath":"python/cocoindex/connectors/qdrant/_target.py","lineNumber":31,"sourceCode":"\nimport msgspec\nfrom dataclasses import dataclass\nfrom typing import (\n    Any,\n    Collection,\n    Generic,\n    Literal,\n    NamedTuple,\n    Sequence,\n    cast,\n)\n\n\ntry:\n    from qdrant_client import QdrantClient\n    from qdrant_client.http import models as qdrant_models\nexcept ImportError as e:\n    raise ImportError(\n        \"qdrant-client is required to use the Qdrant connector. Please install cocoindex[qdrant].\"\n    ) from e\n\nimport cocoindex as coco\nfrom cocoindex.connectorkits import statediff, target\nfrom cocoindex.connectorkits.fingerprint import fingerprint_object\nfrom cocoindex._internal.datatype import TypeChecker\nfrom cocoindex.resources import schema as res_schema\nfrom cocoindex._internal.context_keys import ContextKey, ContextProvider\n\n# Public alias for Qdrant point model\nPointStruct = qdrant_models.PointStruct\n\n# Type aliases\n_PointId = str | int\n_PointFingerprint = bytes\n_POINT_ID_CHECKER: TypeChecker[str | int] = TypeChecker(str | int)  # type: ignore[arg-type]\n","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/cocoindex-io/cocoindex/blob/e84aa99b3292c5270a4b313b2a7137ad9ce8ab3b/python/cocoindex/connectors/qdrant/_target.py#L13-L49","documentation":"Import-time guard for the Qdrant connector: `qdrant_client` is not installed in the environment, so importing the connector module raises immediately. The connector is an optional dependency, isolated behind the `cocoindex[qdrant]` extra.","triggerScenarios":"Running `import cocoindex.connectors.qdrant` (or importing the module that pulls it in) in an environment where only the base cocoindex package was installed.","commonSituations":"Fresh environment/CI where optional extras weren't installed; adding Qdrant as a target after initially installing cocoindex without extras; Docker images that omit optional deps.","solutions":["Install the extra: `pip install 'cocoindex[qdrant]'` (or `uv add 'cocoindex[qdrant]'`).","Or install the client directly: `pip install qdrant-client` with a compatible version.","Regenerate/rebuild your environment/lockfile to include the optional dependency."],"exampleFix":"// before\npip install cocoindex\n// after\npip install \"cocoindex[qdrant]\"","handlingStrategy":"validation","validationCode":"import importlib.util\nif importlib.util.find_spec(\"qdrant_client\") is None:\n    raise RuntimeError(\"Install with: pip install 'cocoindex[qdrant]'\")","typeGuard":null,"tryCatchPattern":"try:\n    from cocoindex.connectors import qdrant\nexcept ImportError as e:\n    if \"qdrant-client is required\" in str(e):\n        sys.exit(\"Run: pip install 'cocoindex[qdrant]'\")\n    raise","preventionTips":["Always install optional extras you use: cocoindex[qdrant].","Pin extras in requirements/pyproject so CI and Docker include them.","Add a smoke import of all connectors in CI."],"tags":["qdrant","dependency","install"],"backgroundTag":"missing-optional-dependency","analyzedSha":"e84aa99b3292c5270a4b313b2a7137ad9ce8ab3b","analyzedAt":"2026-09-08T15:59:19.997Z","contentChangedAt":"2026-09-08T15:59:19.997Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}