【问题标题】:Install pyyaml using pip/Add PyYaml as pip dependency使用 pip 安装 pyyaml/将 PyYaml 添加为 pip 依赖项
【发布时间】:2014-09-07 14:23:08
【问题描述】:

我想在我的 pip 项目中使用 PyYaml,但在将其用作依赖项时遇到了麻烦。 主要问题是 pip 中的 PyYaml 不是跨平台安装。

如何使用 pip 安装 pyyaml 以使其正常工作。请注意,在当前全新的 Ubuntu 安装中,运行 pip install pyyaml 时出现以下错误

Installing collected packages: pyyaml
  Running setup.py install for pyyaml
    checking if libyaml is compilable
    gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -fPIC -I/usr/include/python3.2mu -c build/temp.linux-x86_64-3.2/check_libyaml.c -o build/temp.linux-x86_64-3.2/check_libyaml.o
    build/temp.linux-x86_64-3.2/check_libyaml.c:2:18: fatal error: yaml.h: No such file or directory
    compilation terminated.

    libyaml is not found or a compiler error: forcing --without-libyaml
    (if libyaml is installed correctly, you may need to
     specify the option --include-dirs or uncomment and
     modify the parameter include_dirs in setup.cfg)

Successfully installed pyyaml

请注意,错误提示“安装成功”,但事实并非如此。 我不能import yaml

由于我的第一句话,我不是在寻找说“使用 apt-get”的答案。 我需要跨平台安装并作为 pip 依赖项工作我不只是想知道如何正确安装它。

如果这不可能,有没有我可以使用的库来替代?

【问题讨论】:

  • 尝试在virtualenv中安装,virtualenv pyenv && . pyenv/bin/activate && pip install pyyaml && python -c 'import yaml' 可以吗?
  • @spinus 适用于 python3 但不适用于 python2.7
  • 对我来说也适用于 python2.7。很奇怪,我不知道出了什么问题。我知道你写的是新鲜的 ubuntu,但它真的那么新鲜吗?没有其他想法可能有什么问题。
  • @spinus 好的,我不确定。我刚刚在 AWS 中生成了一个新实例来测试它,而 pyyaml 显然是一个默认库。不知道为什么我第一次没有它。所以问题似乎是个体化的。 (可能会删除这个问题)
  • 你是如何安装pip的?它没有安装在全新的 Ubuntu 安装 AFAIK

标签: python pip yaml


【解决方案1】:

你需要一些额外的包来构建它。

首先需要卸载pyyaml,不然后面会报错已经安装了

pip uninstall pyyaml

然后安装以下软件包:

sudo apt-get install libyaml-dev libpython2.7-dev

终于重新安装了

pip install pyyaml

【讨论】:

  • libpython 是 ubuntu 上 python 2.7 的默认值
  • 不,pyyaml 工作不需要 libyaml-dev。如果已安装 pyyaml 可以将其用作更有效的实现,但这不是必需的。对我来说 pip install pyyaml 没有外部的东西,同样的错误工作得很好。
  • 我需要安装作为 pip 依赖和跨平台工作。如果不清楚,我很抱歉,我已经编辑了我的问题。
  • @Salem:太棒了!谢谢! [[之前]] python -m timeit -s 'import yaml; y=open("config.yml", "r").read()' 'yaml.load(y) ==> 100 个循环,最好的 3 个:每个循环 5.63 毫秒 [[after]] python -m timeit - s'导入yaml; y=open("config.yml", "r").read()' 'yaml.load(y, Loader=yaml.CLoader)' ==> 1000 个循环,最好的 3:每个循环 505 微秒
  • 另请注意,您可能必须在最后一次使用pip install 时使用--no-cache-dir 来强制pip 重新运行设置而不是使用缓存。
【解决方案2】:

虚拟环境设置

Python version: 3.6.3
Operating system: Windows, 64 Bits

Keras 没有安装,因为 pyyaml 设置不符合 python 3.6。 我已经将 Anaconda 安装在不同的 virtualenv 中,并且 keras 工作正常(安装了 pyyaml 模块)。我只是使用 conda install pyyaml 而不是 pip 并安装它,从而使用pip install keras 在我的新虚拟环境中安装 keras 库。

如果您已经安装了 anaconda,请尝试使用

conda 安装 yaml

看看它是否有效。它对我有用!

【讨论】:

    【解决方案3】:

    使用 Salem 的回答作为指导,我可以通过执行以下操作在 Python 3.8 中安装带有 libyaml 绑定的 PyYAML:

    sudo apt-get install libyaml-dev libpython3.8-dev
    pip install pyyaml --global-option=--with-libyaml
    

    如果不指定 --global-option=--with-libyaml 选项,它将不会获取绑定,从而使 CSafeLoader 和 CSafeDumper 类无法访问。

    【讨论】:

      猜你喜欢
      • 2016-08-21
      • 2023-04-03
      • 2018-09-27
      • 2011-01-20
      • 1970-01-01
      • 2021-05-29
      • 2011-11-12
      • 2020-10-04
      • 2013-11-20
      相关资源
      最近更新 更多