{"record":{"id":"62bc28b7ca8f7e65","repo":"pypa/pip","slug":"can-t-perform-this-operation-for-unregistered-load","errorCode":null,"errorMessage":"Can't perform this operation for unregistered loader type","messagePattern":"Can't perform this operation for unregistered loader type","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"src/pip/_vendor/pkg_resources/__init__.py","lineNumber":1728,"sourceCode":"        namespace['__file__'] = script_filename\n        if os.path.exists(script_filename):\n            source = _read_utf8_with_fallback(script_filename)\n            code = compile(source, script_filename, 'exec')\n            exec(code, namespace, namespace)\n        else:\n            from linecache import cache\n\n            cache[script_filename] = (\n                len(script_text),\n                0,\n                script_text.split('\\n'),\n                script_filename,\n            )\n            script_code = compile(script_text, script_filename, 'exec')\n            exec(script_code, namespace, namespace)\n\n    def _has(self, path) -> bool:\n        raise NotImplementedError(\n            \"Can't perform this operation for unregistered loader type\"\n        )\n\n    def _isdir(self, path) -> bool:\n        raise NotImplementedError(\n            \"Can't perform this operation for unregistered loader type\"\n        )\n\n    def _listdir(self, path) -> list[str]:\n        raise NotImplementedError(\n            \"Can't perform this operation for unregistered loader type\"\n        )\n\n    def _fn(self, base: str | None, resource_name: str):\n        if base is None:\n            raise TypeError(\n                \"`base` parameter in `_fn` is `None`. Either override this method or check the parameter first.\"\n            )","sourceCodeStart":1710,"sourceCodeEnd":1746,"githubUrl":"https://github.com/pypa/pip/blob/f399c3718970b1b0e2478dac5296eb62679a9b86/src/pip/_vendor/pkg_resources/__init__.py#L1710-L1746","documentation":"Raised by NullProvider._has() — a stub that always raises NotImplementedError because the base NullProvider has no knowledge of how to check file existence for an arbitrary PEP 302/451 loader. Only concrete subclasses (DefaultProvider, EggProvider, ZipProvider) override _has() with a real filesystem implementation. Hitting this means the provider in use is the un-extended base.","triggerScenarios":"A resource operation (has_resource/has_metadata) routed to a NullProvider instance because the module's loader type was not registered with register_loader_type() to map it to a concrete provider like DefaultProvider.","commonSituations":"Using a custom import hook/loader that is not registered; a namespace package or module loaded by an unusual loader (e.g. in a frozen app, embedded interpreter) that pkg_resources does not recognize.","solutions":["Register your loader type with pkg_resources.register_loader_type(MyLoader, DefaultProvider) so resource ops use a concrete provider.","Ensure the module has a standard __file__-backed filesystem loader so EggProvider/DefaultProvider is selected automatically.","Avoid pkg_resources resource APIs for custom loaders; use importlib.resources instead."],"exampleFix":"// before\n# custom loader, NullProvider._has() raises\nhas = provider.has_resource('data.txt')\n// after\nimport pkg_resources\npkg_resources.register_loader_type(MyLoader, pkg_resources.DefaultProvider)\nhas = provider.has_resource('data.txt')","handlingStrategy":"try-catch","validationCode":"# Register loader before using resource APIs\nimport pkg_resources\npkg_resources.register_loader_type(type(module.__loader__), pkg_resources.DefaultProvider)","typeGuard":null,"tryCatchPattern":"try:\n    provider.has_resource(name)\nexcept NotImplementedError:\n    # fallback to importlib.resources or register loader","preventionTips":["Register custom loaders with register_loader_type().","Migrate to importlib.resources for loader-agnostic access."],"tags":["pkg-resources","resources","loader","not-implemented"],"backgroundTag":null,"analyzedSha":"f399c3718970b1b0e2478dac5296eb62679a9b86","analyzedAt":"2026-08-08T23:01:42.227Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}