无法使用 pyyaml 加载 CLoader

Luc*_*Luc 5 python pyyaml

我正在使用 pyyaml 开发一个 python 项目。我需要在基于 bitnami/minideb:jessie 的 Docker 容器中运行它。Python 版本是 2.7.9。原始代码正在使用 CLoader,我目前无法更改它。CLoader 无法加载但 Loader 正常的任何原因?

>>> import yaml
>>> yaml.__version__
'3.12'
>>> from yaml import Loader
>>> from yaml import CLoader
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name CLoader
>>>
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚我在这里缺少什么。任何的想法 ?

从 Docker 映像 python:2.7.9 运行它不会引发任何错误:

$ docker run -ti python:2.7.9 bash
#/ python
>>> from yaml import CLoader
>>> from yaml import Loader
>>>
Run Code Online (Sandbox Code Playgroud)

Xua*_*uan 5

默认情况下,setup.py 脚本会检查 LibYAML 是否已安装,如果已安装,则构建并安装 LibYAML 绑定。

这是编译和安装 CLoader 的最低要求。

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y \
    python3 python3-dev python3-pip gcc libyaml-dev
RUN pip3 install pyyaml
# verify
RUN python3 -c "import yaml; yaml.CLoader"
Run Code Online (Sandbox Code Playgroud)


use*_*451 0

我只是从上面链接的问题中复制开发人员的答案,但发生这种情况是因为 pyyaml 仅在安装时找到 libyaml-dev 包(无论如何,这是 debian 包)时才安装 libyaml 绑定(CLoader & co.)。如果没有找到,它会打印一条警告并跳过 libyaml 绑定。

因此,在安装 pyyaml 之前先安装 libyaml-dev。