{"record":{"id":"16139011b69dd9b3","repo":"langchain-ai/deepagents","slug":"could-not-parse-optional-dependency-metadata-cann","errorCode":null,"errorMessage":"Could not parse optional-dependency metadata; cannot preserve already-installed extras safely: {raw}","messagePattern":"Could not parse optional-dependency metadata; cannot preserve already-installed extras safely: (.+?)","errorType":"exception","errorClass":"ExtrasIntrospectionError","httpStatus":null,"severity":"error","filePath":"libs/code/deepagents_code/extras_info.py","lineNumber":1279,"sourceCode":"        logger.warning(\n            \"Distribution %s not found; optional-dependency status will be empty\",\n            distribution_name,\n        )\n        return ()\n\n    own_name = distribution_name.lower()\n    installed: dict[str, list[tuple[str, str]]] = {}\n    missing: dict[str, list[str]] = {}\n    for raw in dist.requires or []:\n        try:\n            req = Requirement(raw)\n        except InvalidRequirement:\n            if strict:\n                msg = (\n                    \"Could not parse optional-dependency metadata; cannot \"\n                    f\"preserve already-installed extras safely: {raw}\"\n                )\n                raise ExtrasIntrospectionError(msg) from None\n            logger.warning(\"Could not parse Requires-Dist entry: %s\", raw)\n            continue\n        if not req.marker:\n            continue\n        extra = _extract_extra_name(str(req.marker))\n        if not extra:\n            continue\n        if extra in _COMPOSITE_EXTRAS:\n            continue\n        if req.name.lower() == own_name:\n            continue\n        try:\n            version = pkg_version(req.name)\n        except PackageNotFoundError:\n            missing.setdefault(extra, []).append(req.name)\n        else:\n            installed.setdefault(extra, []).append((req.name, version))\n","sourceCodeStart":1261,"sourceCodeEnd":1297,"githubUrl":"https://github.com/langchain-ai/deepagents/blob/a1af029e6e73cb17c36bff823d227747b28e91e1/libs/code/deepagents_code/extras_info.py#L1261-L1297","documentation":"When parsing the distribution's `Requires-Dist` metadata entries, an entry that fails `packaging.requirements.Requirement` parsing raises `ExtrasIntrospectionError` in strict mode. The strict message stresses that extras already installed on the system cannot be preserved safely without parseable metadata, since the loader cannot tell which extras the distribution declares.","triggerScenarios":"A distribution's METADATA contains a malformed `Requires-Dist` line (unparseable requirement syntax) and `get_optional_dependency_status` runs with `strict=True` on that distribution.","commonSituations":"Hand-edited or truncated `dist-info/METADATA` files; packages built with buggy/misused setup tooling emitting invalid requirement strings; partially failed installs leaving corrupt metadata.","solutions":["Reinstall the affected distribution so clean metadata is regenerated (`pip install --force-reinstall <dist>`)","Fix or remove the malformed `Requires-Dist` entry if the metadata was hand-edited or produced by your own build","Use `strict=False` to skip unparseable entries with a warning when safe preservation is not required"],"exampleFix":"// before\n# dist-info/METADATA (hand-edited)\nRequires-Dist: requests[security]>=2 ; extra === 'sec'\n\n// after\n# valid PEP 508 requirement\nRequires-Dist: requests[security]>=2.0 ; extra == \"sec\"","handlingStrategy":"fallback","validationCode":"from packaging.requirements import Requirement, InvalidRequirement\nfor line in raw_requires_dist:\n    try:\n        Requirement(line)\n    except InvalidRequirement:\n        print(f\"unparseable Requires-Dist: {line}\")","typeGuard":null,"tryCatchPattern":"try:\n    status = get_optional_dependency_status(dist, strict=True)\nexcept ExtrasIntrospectionError as exc:\n    logger.warning(\"bad metadata: %s\", exc)\n    status = get_optional_dependency_status(dist, strict=False)","preventionTips":["Reinstall distributions with corrupt METADATA","Avoid hand-editing dist-info files","Fix requirement strings in your own package build configs"],"tags":["packaging","metadata","parsing"],"backgroundTag":"invalid-requires-dist-metadata","analyzedSha":"a1af029e6e73cb17c36bff823d227747b28e91e1","analyzedAt":"2026-08-29T11:43:24.718Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}