我有一个docker容器,它已经使用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: cannot import name 'YAML‘
我曾尝试指定ruamel.yaml的早期版本,但没有成功,除非我一直回到0.15.0 (从2017年开始)。
我还尝试了python3.x和pip的不同版本,没有任何变化。
发布于 2019-06-12 21:09:20
正如@AKX指出的那样,ruamel.yaml.jinja2 (在执行pip install ruamel.yaml[jinja2]时安装)已更新以处理jinja2注释,并且此嵌套包包含一个虚假的.pth文件,破坏了正确的ruamel.yaml安装。
PyPI上有一个新的0.2.4版本的ruamel.yaml.jinja2,有了这个版本,我就可以毫无错误地构建你的Dockerfile了。
但一般来说,按照@AKX的建议,修复Dockerfile中使用的所有包的版本号是一个好主意。
发布于 2019-06-12 19:10:51
It looks like ruamel.yaml.jinja2 was updated to version 0.2.3 four days ago。
我假设该版本已损坏,因此请暂时手动安装旧版本的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。
https://stackoverflow.com/questions/56560656
复制相似问题