{"id":"8afee99a75fdc123","repo":"python-poetry/poetry","slug":"the-dependency-name-for-dependency-name-does-not","errorCode":null,"errorMessage":"The dependency name for {dependency.name} does not match the actual package's name: {package.name}","messagePattern":"The dependency name for (.+?) does not match the actual package's name: (.+?)","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"src/poetry/puzzle/provider.py","lineNumber":277,"sourceCode":"            self._env = None\n            self._package_python_constraint = original_python_constraint\n\n    @contextmanager\n    def use_latest_for(self, names: Collection[NormalizedName]) -> Iterator[Provider]:\n        self._use_latest = names\n\n        try:\n            yield self\n        finally:\n            self._use_latest = []\n\n    @staticmethod\n    def validate_package_for_dependency(\n        dependency: Dependency, package: Package\n    ) -> None:\n        if dependency.name != package.name:\n            # For now, the dependency's name must match the actual package's name\n            raise RuntimeError(\n                f\"The dependency name for {dependency.name} does not match the actual\"\n                f\" package's name: {package.name}\"\n            )\n\n    def search_for_direct_origin_dependency(self, dependency: Dependency) -> Package:\n        package = self._deferred_cache.get(dependency)\n        if package is not None:\n            pass\n\n        elif dependency.is_vcs():\n            dependency = cast(\"VCSDependency\", dependency)\n            package = self._search_for_vcs(dependency)\n\n        elif dependency.is_file():\n            dependency = cast(\"FileDependency\", dependency)\n            package = self._search_for_file(dependency)\n\n        elif dependency.is_directory():","sourceCodeStart":259,"sourceCodeEnd":295,"githubUrl":"https://github.com/python-poetry/poetry/blob/92b74dcfe348d0e01e14d40d6c1fa47a4ee04a54/src/poetry/puzzle/provider.py#L259-L295","documentation":"Raised by Provider.validate_package_for_dependency() when a resolved Package's name differs from the Dependency's name that pulled it in. Poetry requires the canonical names to match so the resolver's bookkeeping stays consistent; a mismatch usually indicates the dependency was pointed at a distribution whose real package name differs (e.g. a renamed project).","triggerScenarios":"A dependency declaration names one package but the source it resolves to (file/url/vcs/directory) yields a package with a different canonical name. validate_package_for_dependency() is called after a direct-origin or source package is fetched.","commonSituations":"A dependency on 'foo' that actually installs a project renamed to 'foo-lib'; a git/url dep where the repo/package was renamed but pyproject.toml still references the old name; a fork published under a different name; a wheel whose metadata name differs from its filename.","solutions":["Update the dependency declaration to use the package's actual canonical name.","If the project was renamed, point at the new name and version.","For url/vcs/file deps, verify the upstream's pyproject.toml/setup.py [project].name matches what you declared.","Run `poetry show <dep>` or inspect the fetched archive metadata to confirm the real name."],"exampleFix":"// before: dependency name mismatch\n[tool.poetry.dependencies]\nfoo = { git = \"https://github.com/org/foo-lib.git\" }\n# but foo-lib's pyproject.toml name = \"foo-lib\"\n\n// after\n[tool.poetry.dependencies]\nfoo-lib = { git = \"https://github.com/org/foo-lib.git\" }","handlingStrategy":"validation","validationCode":"from poetry.core.utils.patterns import canonicalize_name\n\ndef names_match(dependency_name: str, package_name: str) -> bool:\n    return canonicalize_name(dependency_name) == canonicalize_name(package_name)","typeGuard":null,"tryCatchPattern":"from poetry.puzzle.provider import Provider\n\ntry:\n    Provider.validate_package_for_dependency(dep, pkg)\nexcept RuntimeError:\n    # names diverge; realign the declaration to pkg.name\n    ...","preventionTips":["Keep dependency names in sync with upstream package renames.","For url/vcs/file deps, verify the upstream [project].name before declaring.","Run `poetry lock` after renaming to catch mismatches early.","Prefer canonical (PEP 503-normalised) names in declarations."],"tags":["dependency","puzzle","naming","resolver"],"analyzedSha":"92b74dcfe348d0e01e14d40d6c1fa47a4ee04a54","analyzedAt":"2026-08-04T20:33:34.072Z","schemaVersion":2}