<#2059 Pex lock creation does not handle wheels wi...
# github-notifications
q
#2059 Pex lock creation does not handle wheels with non {`cp`,`pp`,`py`} pyver tag. Issue created by jsirois The error looks like so:
Copy code
$ python -mpex.cli lock create lexid --style universal --resolver-version pip-2020-resolver --interpreter-constraint ">=3.7,<4"
pid 24464 -> /home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/bin/python -sE /home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/pex --disable-pip-version-check --no-python-version-warning --exists-action a --no-input --isolated -q --cache-dir /home/jsirois/.pex/pip_cache --log /tmp/pex-pip-log.n0c8ko88/pip.log download --dest /tmp/tmp5ga3zanm/usr.bin.python3.10 lexid --index-url <https://pypi.org/simple> --retries 5 --timeout 15 exited with 2 and STDERR:
>>> pyversion: pypy27
>>> pyversions: ['py38', 'pypy27']
>>> self: <pip._internal.models.wheel.Wheel object at 0x7f7917559de0>
ERROR: Exception:
Traceback (most recent call last):
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 171, in _merge_into_criterion
    crit = self.state.criteria[name]
KeyError: 'lexid'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_internal/cli/base_command.py", line 223, in _main
    status = self.run(options, args)
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_internal/cli/req_command.py", line 180, in wrapper
    return func(self, options, args)
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_internal/commands/download.py", line 130, in run
    requirement_set = resolver.resolve(
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 121, in resolve
    self._result = resolver.resolve(
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 453, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 318, in resolve
    name, crit = self._merge_into_criterion(r, parent=None)
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 173, in _merge_into_criterion
    crit = Criterion.from_requirement(self._p, requirement, parent)
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 82, in from_requirement
    if not cands:
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_vendor/resolvelib/structs.py", line 124, in __bool__
    return bool(self._sequence)
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 99, in __bool__
    return any(self)
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 220, in iter_index_candidates
    result = self._finder.find_best_candidate(
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_internal/index/package_finder.py", line 882, in find_best_candidate
    candidates = self.find_all_candidates(project_name)
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_internal/index/package_finder.py", line 825, in find_all_candidates
    package_links = self.process_project_url(
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_internal/index/package_finder.py", line 796, in process_project_url
    package_links = self.evaluate_links(
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_internal/index/package_finder.py", line 778, in evaluate_links
    candidate = self.get_install_candidate(link_evaluator, link)
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_internal/index/package_finder.py", line 757, in get_install_candidate
    is_candidate, result = link_evaluator.evaluate_link(link)
  File "/home/jsirois/.pex/venvs/2e77638397a501cfdb2b7c33808a3a7f5fe57413/5985ed09b49a653d6596b0e14d134c5456cf1a9f/lib/python3.10/site-packages/pip/_internal/index/package_finder.py", line 197, in evaluate_link
    if not wheel.supported(supported_tags):
  File "/tmp/tmplos6r6ee/_pex_pip_patches.py", line 158, in <lambda>
    Wheel.supported = lambda *args, **kwargs: all(
  File "/tmp/tmplos6r6ee/_pex_pip_patches.py", line 159, in <genexpr>
    check(*args, **kwargs) for check in supported_checks
  File "/tmp/tmplos6r6ee/_pex_pip_patches.py", line 127, in supported_version
    major = int(match.group("major"))
AttributeError: 'NoneType' object has no attribute 'group'
The issue here is that the two oldest releases of
lexid
have wheels with
pypy27
pyver tags. For example: https://pypi.org/project/lexid/2020.1003/#files Which has
<https://files.pythonhosted.org/packages/d0/29/c6ca27464a82787ffd9be6f19be6c2715cc660957a39ec689bc1654fd89d/lexid-2020.1003-py38.pypy27-none-any.whl>
. This patching code here is both incorrect and unhelpful when it is incorrect: pex/pex/resolve/locker_patches.py Lines 114 to 122 in </pantsbuild/pex/commit/06570eb41d6681a537bc561aa1a670dfb6dd2c3a|06570eb> pantsbuild/pex