【问题标题】:pip3 install ruamel.yaml[jinja2] breaks ruamel.yamlpip3 install ruamel.yaml[jinja2] 破坏了 ruamel.yaml
【发布时间】:2019-06-12 11:04:29
【问题描述】:

我有一个使用 ruamel.yaml 和 ruamel.yaml.jinja2 一段时间的 docker 容器。最近它开始失败了。以下 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,没有任何变化。

【问题讨论】:

  • 这个貌似是ruamel.yaml.jinja2包的bug,@AKX已经举报了

标签: python python-3.x yaml ruamel.yaml


【解决方案1】:

正如@AKX 指出的那样,ruamel.yaml.jinja2(在您安装 pip install ruamel.yaml[jinja2] 时安装)已更新以处理 jinja2 cmets,并且此嵌套包包含一个虚假的 .pth 文件,破坏了正确的 ruamel.yaml 安装。

在 PyPI 上有一个新的 0.2.4 版本的 ruamel.yaml.jinja2,我已经能够毫无错误地构建您的 Dockerfile

但总的来说,按照@AKX 的建议,修复您在 Dockerfile 中使用的所有包的版本号是个好主意。

【讨论】:

    【解决方案2】:

    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

    【讨论】:

    • 这行得通。非常感谢!我实际上检查了更新日志,但它自 2017 年以来就没有更新过,所以我认为没有最近的版本。我看到作者刚刚更新了它!
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2017-03-06
    • 2021-10-10
    • 2017-06-24
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多