pip3 安装 PyYAML 失败.(python3.7,macOS High Sierra)



今天我用brew upgrade命令升级了python3.7。

我尝试使用pip3安装 PyYAML 包。

我有这个错误,不知道..

% pip3 安装 PyYAML 检查利比亚是否可链接 clang build/temp.macosx-10.13-x86_64-3.7/check_libyaml.o -L/usr/local/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/sqlite/lib -lyaml -o build/temp.macosx-10.13-x86_64-3.7/check_libyaml 建筑"_yaml"扩建 创建 build/temp.macosx-10.13-x86_64-3.7/ext clang -Wno-unused-result -wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -I/usr/local/include -I/usr/local/opt/openssl/include -I/usr/local/opt/sqlite/include -I/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/include/python3.7m -c ext/_yaml.c -o build/temp.macosx-10.13-x86_64-3.7/ext/_yaml.o 在 ext/_yaml.c:271 包含的文件中: ext/_yaml.h:10:9:警告:"PyString_CheckExact"宏重新定义 [-Wmacro-redefined] #define PyString_CheckExact PyBytes_CheckExact ^ ext/_yaml.c:139:11:注意:以前的定义在这里 #define PyString_CheckExact PyUnicode_CheckExact ^ ext/_yaml.c:1410:17:警告:从"const char *"分配给"char *"会丢弃限定符 [-Wincompatible-指针类型-discard-qualifiers] __pyx_v_value = yaml_get_version_string((; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ ext/_yaml.c:2577:52:警告:不兼容的指针类型将"int (void *, char *, size_t, size_t *("(又名 'int (void *, char *, unsigned long, unsigned long *('(传递给类型为 'yaml_read_handler_t *' 的参数(又名 'int (*((void *, 无符号字符 *, 无符号长整型, 无符号长整型 *('( [-Win兼容指针类型] yaml_parser_set_input((&__pyx_v_self->解析器(, __pyx_f_5_yaml_input_handler, ((void *(__pyx_v_self((;  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~/usr/local/include/yaml.h:1370:30:注意:在此处将参数传递给参数"handler" .......

最后

/
usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/include/python3.7m/pystate.h:238:15:注意:此处声明"curexc_traceback" PyObject *curexc_traceback; ^ 生成 51 个警告和 15 个错误。 错误:命令"clang"失败,退出状态为 1 ---------------------------------------- 命令 "/usr/local/opt/python/bin/python3.7 -u -c "import setuptools, tokenize;__file__='/private/tmp/pip-install-exbgmayz/PyYAML/setup.py';f=getattr(tokenize, 'open', open((__file__(;code=f.read((.replace('\r', ''(;f.close((;exec(compile(code, __file__, 'exec'((" install --record/private/tmp/pip-record-n11vy5s0/install-record.txt --single-version-externally-managed --compile"失败,错误代码为 1 in/private/tmp/pip-install-exbgmayz/PyYAML/

我已经尝试解决这个问题,但仍然不知道。

  • https://github.com/yaml/pyyaml/issues/126
  • 如何为 Python 安装 yaml 包?

如何解决此问题..?

PyYAML的C扩展不能在3.7上编译,这就是错误消息的内容以及问题126线程中的某些消息所指的内容。PyYAML安装程序中有一种机制,应该测试C扩展是否可以编译,它主要检查libyaml是否可用。

我假设你升级到3.7.0(而不是在你写的时候升级Python3.7(,所以我建议你降级到3.6。虽然 PyYAML 在 PyPI 上的页面表明只支持 3.4 和 3.5,但 3.6 似乎没问题。

如果你不能降级 Python,并且现在需要 3.7 的功能,你可以考虑使用ruamel.yaml(免责声明:我是该包的作者(。它本质上是 PyYAML 的超集,所以通常做

import ruamel.yaml as yaml

应该让你的程序工作。由于 3.7 的 macOS 轮子在 PyPI 安装上可用,因此应该不会造成任何问题。

Python 3.7 破坏了 PyYaml 的构建。使用 Python 3.6。

yaml 不适用于 Python 3.7

修复:降级到python2并安装yaml

  1. brew install python@2。
  2. brew install libyaml
  3. sudo python -m easy_install pyyaml.

最新更新