简体   繁体   English

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

[英]pip3 install PyYAML failed.(python3.7, macOS High Sierra)

Today I've upgraded python3.7 with brew upgrade command. 今天我用brew upgrade命令升级了python3.7。

And I've tried to install PyYAML package with pip3 . 我试图用pip3安装PyYAML包。

I've got this error and have no idea.. 我有这个错误,不知道..

% pip3 install PyYAML

    checking if libyaml is linkable
    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
    building '_yaml' extension
    creating 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
    In file included from ext/_yaml.c:271:
    ext/_yaml.h:10:9: warning: 'PyString_CheckExact' macro redefined [-Wmacro-redefined]
    #define PyString_CheckExact PyBytes_CheckExact
            ^
    ext/_yaml.c:139:11: note: previous definition is here
      #define PyString_CheckExact          PyUnicode_CheckExact
              ^
    ext/_yaml.c:1410:17: warning: assigning to 'char *' from 'const char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]
      __pyx_v_value = yaml_get_version_string();
                    ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
    ext/_yaml.c:2577:52: warning: incompatible pointer types passing 'int (void *, char *, size_t, size_t *)' (aka 'int (void *, char *, unsigned long, unsigned long *)') to parameter of type 'yaml_read_handler_t *' (aka '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: note: passing argument to parameter 'handler' here 

.......

And finally 最后

/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/include/python3.7m/pystate.h:238:15: note: 'curexc_traceback' declared here
        PyObject *curexc_traceback;
                  ^
    51 warnings and 15 errors generated.
    error: command 'clang' failed with exit status 1

    ----------------------------------------
Command "/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" failed with error code 1 in /private/tmp/pip-install-exbgmayz/PyYAML/

I've tried solve this problem, but still have no idea. 我试过解决这个问题,但仍然不知道。

How can I resolve this issue..? 我该如何解决这个问题..?

PyYAML's C extension do not compile on 3.7, that is what the error message is about and what some messages in the thread of issue 126 refer to. PyYAML的C扩展不在3.7上编译,这就是错误消息的内容以及问题126的线程中的某些消息所引用的内容。 There is a mechanism in the PyYAML installer that should test if the C extension can be compiled, it mostly checks if libyaml is available. PyYAML安装程序中有一个机制应该测试是否可以编译C扩展,它主要检查libyaml是否可用。

I assumed you upgraded to 3.7.0 (instead of upgrading Python3.7 as you write) so I suggest you downgrade to 3.6. 我假设您升级到3.7.0(而不是在编写时升级Python3.7)所以我建议你降级到3.6。 Although PyYAML's page on PyPI , indicates that only 3.4 and 3.5 are supported, 3.6 seems to be fine. 虽然PyYAML的PyPI页面表明只支持3.4和3.5,但3.6似乎没问题。

If you can't downgrade Python, and need the functionality of 3.7 now, you can consider using ruamel.yaml (disclaimer: I am the author of that package). 如果你不能降级Python,并且现在需要3.7的功能,你可以考虑使用ruamel.yaml (免责声明:我是该软件包的作者)。 It is essentially a superset of PyYAML, so normally doing 它本质上是PyYAML的超集,所以通常这样做

import ruamel.yaml as yaml

should get your program working. 应该让你的程序工作。 Since macOS wheels for 3.7 are available on PyPI installation should not cause any problems. 由于PyPI安装上可用的3.7的macOS车轮不应该导致任何问题。

Python 3.7 breaks the build for PyYaml. Python 3.7打破了PyYaml的构建。 Use Python 3.6. 使用Python 3.6。

yaml didnt work with python 3.7 yaml没有使用python 3.7

Fix: downgrade to python2 and install yaml 修复:降级到python2并安装yaml

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM