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

Posted

技术标签:

【中文标题】pip3 安装 PyYAML 失败。(python3.7,macOS High Sierra)【英文标题】:pip3 install PyYAML failed.(python3.7, macOS High Sierra) 【发布时间】:2018-12-12 10:01:31 【问题描述】:

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

我已经尝试使用pip3 安装 PyYAML 包。

我遇到了这个错误,不知道..

% pip3 安装 PyYAML 检查 libyaml 是否可链接 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 构建/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/包括 -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 构建/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-pointer-types-discards-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 *, unsigned char *, unsigned long, unsigned long *)')[-Wincompatible-pointer-types] yaml_parser_set_input((&__pyx_v_self->parser), __pyx_f_5_yaml_input_handler, ((void *)__pyx_v_self)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/local/include/yaml.h:1370:30:注意:在此处将参数传递给参数“处理程序” …………

最后

 /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\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /private/tmp/pip-record-n11vy5s0/install-record.txt --single-version-externally-managed --compile" 失败,错误代码 1 在 /private/tmp/点安装-exbgmayz/PyYAML/

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

https://github.com/yaml/pyyaml/issues/126 How do I install the yaml package for Python?

我该如何解决这个问题..?

【问题讨论】:

“我可以帮你吗..?”询问是否可以向其他人提供帮助。您可能想问诸如“我怎样才能解决这个问题?”之类的问题。你有什么办法解决这个问题? 哦..谢谢你让我知道先生。 检查github.com/yaml/pyyaml/issues/152中建议的解决方法 【参考方案1】:

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

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

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

import ruamel.yaml as yaml

应该让您的程序正常工作。由于 3.7 的 macOS ***可用于 PyPI 安装,因此不会造成任何问题。

【讨论】:

谢谢大佬,我已经下载到python3.6.0了。而且效果很好。【参考方案2】:

Python 3.7 中断了 PyYaml 的构建。使用 Python 3.6。

【讨论】:

【参考方案3】:

yaml 不适用于 python 3.7

修复:降级到python2并安装yaml

    brew install python@2. brew 安装 libyaml sudo python -m easy_install pyyaml.

【讨论】:

以上是关于pip3 安装 PyYAML 失败。(python3.7,macOS High Sierra)的主要内容,如果未能解决你的问题,请参考以下文章

Python3安装Pyyaml

python之 pyCharm pip安装pandas库失败

pip3 install xxx 失败查找步骤

Python pyYAML模块

pytorch安装(使用pip3装到conda环境下)

Python django 安装 mysqlclient 失败