Я пытаюсь установить 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'
~~~~~~~~~~^
Спасибо @ 9769953. В основном я хотел показать проблему с пипсом в этом вопросе, но приятно знать, что префект исправил ее, я буду использовать более новую версию префекта.
Не уверен, что это лучшее решение, но в итоге я использовал последнюю версию 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
, которую я пытался использовать, использует несовместимое имя версии kubernetes
9.0.0a1.0
здесь
Вместо этого используйте префект 1.4.1. Это последняя версия в серии 1.x, и в ней, по сути, исправлены только ошибки по сравнению с версией 1.4.0.
Одно из этих исправлений ошибок касается именно этой несуществующей (и искаженной) версии пакета Kubernetes; см. этот пул реквест префекта.
Просто отметим: вы установили версию pip от июля 2024 года, а prefect 1.4.0 — от сентября 2022 года. Так что в этом смысле вам следует использовать pip примерно того времени. Или, альтернативно, более новая версия prefect: в версии 1.4.1 исправлена версия Kubernetes.