Skip to content

Fix locate_file() type hints for older Pythons #13181

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 26, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions news/13181.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Restore opt-in ``importlib.metadata`` backend support on Python 3.10 and lower
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not a huge fan of this wording as it seems to be actually still broken on the older Pythons, but that is the risk when you try to use a private envvar...

Obtaining file:///home/ichard26/dev/oss/pip
  Installing build dependencies ... error
  error: subprocess-exited-with-error
  
  × pip subprocess to install build dependencies did not run successfully.
  │ exit code: 2
  ╰─> [53 lines of output]
      Collecting setuptools>=67.6.1
        Using cached setuptools-75.8.0-py3-none-any.whl.metadata (6.7 kB)
      ERROR: Exception:
      Traceback (most recent call last):
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/cli/base_command.py", line 105, in _run_wrapper
          status = _inner_run()
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/cli/base_command.py", line 96, in _inner_run
          return self.run(options, args)
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/cli/req_command.py", line 67, in wrapper
          return func(self, options, args)
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/commands/install.py", line 379, in run
          requirement_set = resolver.resolve(
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 95, in resolve
          result = self._result = resolver.resolve(
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_vendor/resolvelib/resolvers.py", line 546, in resolve
          state = resolution.resolve(requirements, max_rounds=max_rounds)
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_vendor/resolvelib/resolvers.py", line 397, in resolve
          self._add_to_criteria(self.state.criteria, r, parent=None)
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_vendor/resolvelib/resolvers.py", line 173, in _add_to_criteria
          if not criterion.candidates:
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_vendor/resolvelib/structs.py", line 156, in __bool__
          return bool(self._sequence)
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 174, in __bool__
          return any(self)
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 162, in <genexpr>
          return (c for c in iterator if id(c) not in self._incompatible_ids)
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 53, in _iter_built
          candidate = func()
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 187, in _make_candidate_from_link
          base: Optional[BaseCandidate] = self._make_base_candidate_from_link(
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 233, in _make_base_candidate_from_link
          self._link_candidate_cache[link] = LinkCandidate(
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 304, in __init__
          super().__init__(
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 159, in __init__
          self.dist = self._prepare()
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 236, in _prepare
          dist = self._prepare_distribution()
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 315, in _prepare_distribution
          return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True)
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/operations/prepare.py", line 521, in prepare_linked_requirement
          metadata_dist = self._fetch_metadata_only(req)
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/operations/prepare.py", line 373, in _fetch_metadata_only
          return self._fetch_metadata_using_link_data_attr(
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/operations/prepare.py", line 412, in _fetch_metadata_using_link_data_attr
          if canonicalize_name(metadata_dist.raw_name) != canonicalize_name(req.req.name):
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/metadata/base.py", line 419, in raw_name
          return self.metadata.get("Name", self.canonical_name)
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/metadata/importlib/_dists.py", line 162, in canonical_name
          return get_dist_canonical_name(self._dist)
        File "/home/ichard26/.local/share/vem/envs/pip-20250126-105715/lib/python3.9/site-packages/pip/_internal/metadata/importlib/_compat.py", line 82, in get_dist_canonical_name
          name = cast(Any, dist).name
      AttributeError: 'PathDistribution' object has no attribute 'name'
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.

[notice] A new release of pip is available: 24.3.1 -> 25.0
[notice] To update, run: pip install --upgrade pip
error: subprocess-exited-with-error

× pip subprocess to install build dependencies did not run successfully.
│ exit code: 2
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

by fixing an unsupported type annotation.
3 changes: 2 additions & 1 deletion src/pip/_internal/metadata/importlib/_dists.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
Mapping,
Optional,
Sequence,
Union,
cast,
)

Expand Down Expand Up @@ -96,7 +97,7 @@ def read_text(self, filename: str) -> Optional[str]:
raise UnsupportedWheel(error)
return text

def locate_file(self, path: str | PathLike[str]) -> pathlib.Path:
def locate_file(self, path: Union[str, "PathLike[str]"]) -> pathlib.Path:
# This method doesn't make sense for our in-memory wheel, but the API
# requires us to define it.
raise NotImplementedError
Expand Down
Loading