pip3 установить ruamel.yaml [jinja2] breaks ruamel.yaml - PullRequest
1 голос
/ 12 июня 2019

У меня есть докер-контейнер, который некоторое время использовал ruamel.yaml и ruamel.yaml.jinja2.В последнее время он начал терпеть неудачу.Следующий файл dockerfile воспроизводит проблему:

FROM ubuntu

RUN apt update; apt install -y python3 python3-pip
RUN pip3 install -U pip setuptools wheel
RUN pip install ruamel.yaml
RUN python3 -c "from ruamel.yaml import YAML"

RUN pip install ruamel.yaml[jinja2]
RUN python3 -c "from ruamel.yaml import YAML"

Первая команда python3 успешно выполняется, но последняя завершается неудачно со следующим сообщением: ImportError: невозможно импортировать имя 'YAML'

Я пытался указать ранееверсии ruamel.yaml, но безуспешно, если я не вернусь до 0.15.0 (с 2017 года).

Я также пробовал разные версии python3.x и pip без изменений.

Ответы [ 2 ]

2 голосов
/ 12 июня 2019

Как @AKX указал ruamel.yaml.jinja2 (который устанавливается, когда вы делаете pip install ruamel.yaml[jinja2]), был обновлен для обработки комментариев jinja2, и этот вложенный пакет содержал поддельный .pth файл, нарушающий правильную установку ruamel.yaml.

Существует новая версия 0.2100 * для PyPI, версия 0.2.4 *, и благодаря этому я смог создать ваш Dockerfile без ошибок.

Но в целом это хорошая идея:исправьте номера версий всех пакетов, которые вы используете в Dockerfile, как предложено @AKX.

2 голосов
/ 12 июня 2019

Это похоже, что ruamel.yaml.jinja2 было обновлено до версии 0.2.3 четыре дня назад .

Я предполагаю, что версия не работает, поэтому вместо этого установите старую версию ruamel.yaml.jinja2 вручнуюна данный момент:

pip install ruamel.yaml "ruamel.yaml.jinja2<0.2.3"

Кажется, это тоже работает.

~ $ docker run -it python:3.7-stretch sh -c 'pip install ruamel.yaml[jinja2]; python3 -c "from ruamel.yaml import YAML"'
Collecting ruamel.yaml[jinja2]
Collecting ruamel.yaml.jinja2>=0.2; extra == "jinja2" (from ruamel.yaml[jinja2])
Successfully installed ruamel.yaml-0.15.97 ruamel.yaml.jinja2-0.2.3
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: cannot import name 'YAML' from 'ruamel.yaml' (/usr/local/lib/python3.7/site-packages/ruamel/yaml/__init__.py)

~ $ docker run -it python:3.7-stretch sh -c 'pip install ruamel.yaml "ruamel.yaml.jinja2<0.2.3"; python3 -c "from ruamel.yaml import YAML"'
Collecting ruamel.yaml
Collecting ruamel.yaml.jinja2<0.2.3
Successfully installed ruamel.yaml-0.15.97 ruamel.yaml.jinja2-0.2.2
~ $

Долгосрочное исправление заключается в использовании правильной системы закрепления версии зависимости - мне нравится pip-tools.

...