Pip >24.0 вызывает ожидаемое соответствие RIGHT_PARENTHESIS для LEFT_PARENTHESIS после спецификатора версии kubernetes (>=9.0.0a1.0) ; дополнительно == 'all_extras'

Я пытаюсь установить prefect[kubernetes,azure]==1.4.0 с помощью pip.

Он успешно установлен с помощью pip<=24.0.

Однако при любом pip>24.0 установка не удалась. Например:

# in a venv
pip install pip==24.2 # released on 2024-07-29
pip install prefect[kubernetes,azure]==1.4.0

приводит к

ERROR: Exception:
Traceback (most recent call last):
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3367, in _dep_map
    return self.__dep_map
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3147, in __getattr__
    raise AttributeError(attr)
AttributeError: _DistInfoDistribution__dep_map

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/packaging/requirements.py", line 36, in __init__
    parsed = _parse_requirement(requirement_string)
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/packaging/_parser.py", line 62, in parse_requirement
    return _parse_requirement(Tokenizer(source, rules=DEFAULT_RULES))
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/packaging/_parser.py", line 80, in _parse_requirement
    url, specifier, marker = _parse_requirement_details(tokenizer)
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/packaging/_parser.py", line 118, in _parse_requirement_details
    specifier = _parse_specifier(tokenizer)
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/packaging/_parser.py", line 208, in _parse_specifier
    with tokenizer.enclosing_tokens(
  File "/usr/lib/python3.10/contextlib.py", line 142, in __exit__
    next(self.gen)
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/packaging/_tokenizer.py", line 189, in enclosing_tokens
    self.raise_syntax_error(
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/packaging/_tokenizer.py", line 167, in raise_syntax_error
    raise ParserSyntaxError(
pip._vendor.packaging._tokenizer.ParserSyntaxError: Expected matching RIGHT_PARENTHESIS for LEFT_PARENTHESIS, after version specifier
    kubernetes (>=9.0.0a1.0) ; extra == 'all_extras'
               ~~~~~~~~~~^

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_internal/cli/base_command.py", line 105, in _run_wrapper
    status = _inner_run()
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_internal/cli/base_command.py", line 96, in _inner_run
    return self.run(options, args)
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_internal/cli/req_command.py", line 67, in wrapper
    return func(self, options, args)
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_internal/commands/install.py", line 379, in run
    requirement_set = resolver.resolve(
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 95, in resolve
    result = self._result = resolver.resolve(
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 546, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 427, in resolve
    failure_causes = self._attempt_to_pin_criterion(name)
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 239, in _attempt_to_pin_criterion
    criteria = self._get_updated_criteria(candidate)
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 229, in _get_updated_criteria
    for requirement in self._p.get_dependencies(candidate=candidate):
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/provider.py", line 247, in get_dependencies
    return [r for r in candidate.iter_dependencies(with_requires) if r is not None]
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/provider.py", line 247, in <listcomp>
    return [r for r in candidate.iter_dependencies(with_requires) if r is not None]
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 401, in iter_dependencies
    for r in self.dist.iter_dependencies():
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_internal/metadata/pkg_resources.py", line 247, in iter_dependencies
    return self._dist.requires(extras)
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3070, in requires
    dm = self._dep_map
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3369, in _dep_map
    self.__dep_map = self._compute_dependencies()
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3379, in _compute_dependencies
    reqs.extend(parse_requirements(req))
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3434, in __init__
    super().__init__(requirement_string)
  File "/home/lambis/Projects/Prefect/prefect-flows/.venv/lib/python3.10/site-packages/pip/_vendor/packaging/requirements.py", line 38, in __init__
    raise InvalidRequirement(str(e)) from e
pip._vendor.packaging.requirements.InvalidRequirement: Expected matching RIGHT_PARENTHESIS for LEFT_PARENTHESIS, after version specifier
    kubernetes (>=9.0.0a1.0) ; extra == 'all_extras'
               ~~~~~~~~~~^

🤔 А знаете ли вы, что...
С Python можно создавать веб-скраперы для извлечения данных из веб-сайтов.


50
2

Ответы:

Не уверен, что это лучшее решение, но в итоге я использовал последнюю версию pip, в которую можно было установить пакеты. Для меня это был pip==24.0, установленный с помощью pip install pip==24.0. ВНИМАНИЕ: запускайте это только в виртуальной среде, а не в глобальной области.

Причиной сбоя, видимо, являются изменения, внесенные в pip==24.1b1 описанные здесь

pip исторически допускал использование множества произвольных строк в качестве версий и спецификаторов версий. В дальнейшем все версии и спецификаторы версий должны будут соответствовать https://packaging.python.org/en/latest/specifications/version-specifiers/ (на основе PEP 440).

в сочетании с пакетами, которые вызывают несовместимое имя версии. В моем случае версия prefect, которую я пытался использовать, использует несовместимое имя версии kubernetes9.0.0a1.0здесь


Решено

Вместо этого используйте префект 1.4.1. Это последняя версия в серии 1.x, и в ней, по сути, исправлены только ошибки по сравнению с версией 1.4.0.

Одно из этих исправлений ошибок касается именно этой несуществующей (и искаженной) версии пакета Kubernetes; см. этот пул реквест префекта.