首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pip3 install ruamel.yaml[jinja2] breaks ruamel.yaml

pip3 install ruamel.yaml[jinja2] breaks ruamel.yaml
EN

Stack Overflow用户
提问于 2019-06-12 19:04:29
回答 2查看 1K关注 0票数 1

我有一个docker容器,它已经使用ruamel.yaml和ruamel.yaml.jinja2一段时间了。最近,它开始失败了。下面的dockerfile重现了这个问题:

代码语言:javascript
复制
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的不同版本,没有任何变化。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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中使用的所有包的版本号是一个好主意。

票数 2
EN

Stack Overflow用户

发布于 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

代码语言:javascript
复制
pip install ruamel.yaml "ruamel.yaml.jinja2<0.2.3"

这似乎也行得通。

代码语言:javascript
复制
~ $ 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56560656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档