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
, которая исправила проблему.