pip3安装PyYAML失败。(python3.7,macOS High Sierra)
pip3安装PyYAML失败。(python3.7,macOS High Sierra)
今天我使用brew upgrade
命令升级了python3.7。\n然后我尝试使用pip3
安装PyYAML包。\n但我遇到了以下错误,不知道怎么解决..\n
\n% pip3 install PyYAML\n 检查libyaml是否链接\n 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\n 构建\'_yaml\'扩展\n 创建build/temp.macosx-10.13-x86_64-3.7/ext\n 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\n 在文件ext/_yaml.c的271行包含:\n ext/_yaml.h:10:9: 警告:宏“PyString_CheckExact”被重新定义[-Wmacro-redefined]\n #define PyString_CheckExact PyBytes_CheckExact\n ^\n ext/_yaml.c:139:11: 注意:前一次定义在这里\n #define PyString_CheckExact PyUnicode_CheckExact\n ^\n ext/_yaml.c:1410:17: 警告:从\'const char *\'赋值给\'char *\'会丢失限定符[-Wincompatible-pointer-types-discards-qualifiers]\n __pyx_v_value = yaml_get_version_string();\n ^ ~~~~~~~~~~~~~~~~~~~~~~~~~\n 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]\n yaml_parser_set_input((&__pyx_v_self->parser), __pyx_f_5_yaml_input_handler, ((void *)__pyx_v_self));\n ^~~~~~~~~~~~~~~~~~~~~~~~~~~~\n /usr/local/include/yaml.h:1370:30: 注意:在此传递参数给\'handler\'\n.......\n
\n最终出现以下错误\n
/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/include/python3.7m/pystate.h:238:15: 注意:在此声明\'curexc_traceback\'\n PyObject *curexc_traceback;\n ^\n 生成了51个警告和15个错误。\n 错误:命令\'clang\'以退出状态1失败。\n ----------------------------------------\n命令\"/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/pip-install-exbgmayz/PyYAML/中\n
\n我尝试解决这个问题,但还是没有头绪。\n
\n我应该如何解决这个问题..?
在安装PyYAML时出现了报错"pip3 install PyYAML failed.(python3.7, macOS High Sierra)"。该问题的原因是PyYAML与Python 3.7不兼容所致。
解决方法是降级到Python 2并安装YAML。具体步骤如下:
1. 首先,使用Homebrew安装Python2:`brew install python`。
2. 然后,安装libyaml库:`brew install libyaml`。
3. 最后,使用以下命令安装PyYAML:`sudo python -m easy_install pyyaml`。
这样做的原因是因为在遇到问题时,需要Python 3.X的用户只能通过降级到Python 2来解决。
问题出现的原因是PyYAML的C扩展在Python 3.7上无法编译。错误消息和问题126的线程中的一些消息都指向了这一点。PyYAML安装程序中有一种机制,应该测试是否可以编译C扩展,它主要检查libyaml是否可用。
作者假设你已经升级到了3.7.0(而不是像你写的那样升级了Python 3.7),所以建议你降级到3.6。虽然PyYAML在PyPI上的页面显示只支持3.4和3.5,但3.6似乎是可以正常工作的。
如果你无法降级Python,并且现在需要3.7的功能,可以考虑使用ruamel.yaml(免责声明:我是该软件包的作者)。它本质上是PyYAML的超集,所以通常只需导入"import ruamel.yaml as yaml",你的程序就可以正常工作了。由于PyPI上提供了适用于3.7的macOS wheels,所以安装不应该引起任何问题。
感谢你的回复,我已经下载了Python 3.6.0,并且它可以正常工作了。