pipenv: packaging.specifiers.InvalidSpecifier: Неверный спецификатор

Я получаю эту ошибку при воссоздании Pipfile.lock:

packaging.specifiers.InvalidSpecifier: Invalid specifier '==0.5.2-auto'

Я думаю, что это как-то связано с -auto суффикс, но по какой-то причине он работает на другом компьютере.

По некоторым причинам трассировка кажется обрезанной, вот что я вижу в консоли:

pipenv/vendor/requirementslib/models/requirements.py", line 1008, in get_version
    return parse_version(self.get_specifier().version)
  File "/home/johneye/.local/share/virtualenvs/python-microservice-scaffolding-ylP1urgf/lib/python3.6/site-packages/pipenv/vendor/requirementslib/models/requirements.py", line 1005, in get_specifier
    return Specifier(self.specifiers)
  File "/home/johneye/.local/share/virtualenvs/python-microservice-scaffolding-ylP1urgf/lib/python3.6/site-packages/pipenv/vendor/packaging/specifiers.py", line 85, in __init__
    raise InvalidSpecifier("Invalid specifier: '{0}'".format(spec))
packaging.specifiers.InvalidSpecifier: Invalid specifier '==0.5.2-auto'

1 ответ

Я публикую частичный ответ, так как я получил только три результата в Google при поиске точного сообщения об ошибке.

Из анализа кода и его изменения стало ясно, что существует по крайней мере два вида спецификаторов - устаревший спецификатор, который может содержать практически все, и стандартный спецификатор, который соответствует PEP 440.

Когда зависимости блокируются, спецификаторы проверяются по регулярному выражению, чтобы увидеть, являются ли они действительными или нет. Я видел, что они иногда проверяются на соответствие спецификатору legacy, а иногда - обычному. На этом этапе я отказался от поиска основной причины и решил, что будет лучше исправить мой код, чтобы он соответствовал обоим спецификаторам, поэтому я изменил его на ==0.5.2-dev1, которая исправила проблему.

Другие вопросы по тегам