CompileError/LinkerError: "command 'gcc' failed with exit status 1" 是啥意思,在 IPython 中运行 %%c
Posted
技术标签:
【中文标题】CompileError/LinkerError: "command \'gcc\' failed with exit status 1" 是啥意思,在 IPython 中运行 %%cython-magic 单元时【英文标题】:What does CompileError/LinkerError: "command 'gcc' failed with exit status 1" mean, when running %%cython-magic cell in IPythonCompileError/LinkerError: "command 'gcc' failed with exit status 1" 是什么意思,在 IPython 中运行 %%cython-magic 单元时 【发布时间】:2019-08-30 12:25:14 【问题描述】:有时,当我在 IPython 笔记本中运行 %%cython-cell 时,我会得到一个很长的回溯,并以非常短的错误消息结尾:
CompileError: command 'gcc' failed with exit status 1
或
LinkError: 命令“gcc”失败,退出状态为 1
在 Windows 上相应的消息是:
CompileError: command 'C:.\Microsoft Visual Studio\..\cl.exe' 失败,退出状态为 X
和
LinkError:命令 'C:..\Microsoft Visual Studio\..\link.exe' 失败,退出状态为 YYYY
是否可以获得有关潜在错误的更精确信息?
这样的 %%cython-cell 示例如下:
[1] %load_ext Cython
[2] %%cython
from sklearn.tree._tree cimport Node
print("loaded")
【问题讨论】:
我对此表示赞成,因为如果没有赞成的答案,它就不能成为重复的目标(我怀疑这是你的意图) @DavidW 谢谢,我不认为它会成为一个很好的欺骗目标,因为问题每次都会有所不同,但在 cmets 中解释这一点非常乏味。并不是说这个问答到目前为止效果很好...... 【参考方案1】:%%cython
魔法使用distutils
在底层构建 Cython 扩展,而 IPython不会捕获输出 gcc 或其他编译器/链接器日志到标准错误/输出。
要查看编译器/链接器记录的错误和警告,必须转到编译器记录错误的位置,这取决于 IPython 的启动方式。
在 Linux 上还有另一种可能性:安装 wurlitzer
软件包并通过 %load_ext wurlitzer
激活它,这也将捕获 gcc 的输出并将其显示在笔记本中,另请参阅 this answer。
遗憾的是,wurlitzer
仅适用于 Linux,而下面的选项适用于任何操作系统。
IPython/Jupiter 笔记本:
当笔记本从终端启动时,例如通过ipython notebook
或类似方式,然后可以在此终端中看到编译器输出 - 我们看到上述单元格的问题是:
/home/ed/.cache/ipython/cython/_cython_magic_5f6d267a6f541c572b4517a74d5c9aad.c:607:31: 致命错误:
numpy/arrayobject.h
:没有这样的文件或目录 编译终止。
缺少 numpy-headers,可在 numpy.get_include()
中找到。
IPython 控制台
如果 IPython 从终端启动,错误会直接记录到 IPython 控制台。但请注意:编译器/链接器输出将直接出现在错误跟踪的开头:
>>> ipython
Python 3.7.3 (default, Mar 27 2019, 22:11:17)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.4.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: %load_ext Cython
In [2]: %%cython
...: from sklearn.tree._tree cimport Node
...: print("loaded")
...:
...:
/home/ed/.cache/ipython/cython/_cython_magic_1182f410e5c0a56b03b28dd88700704d.c:607:31: fatal error: numpy/arrayobject.h: No such file or directory
compilation terminated.
---------------------------------------------------------------------------
DistutilsExecError Traceback (most recent call last)
....
CompileError: command 'gcc' failed with exit status 1
第一行告诉我们需要知道的一切!
Spyder:
至少从 Spyder 3.3.3 开始,编译器/链接器的输出可以在 IPython 控制台中看到(与在独立的 IPython 控制台中相同)。
示例 %%cython-cell 可以固定如下:
%%cython -I <path from numpy.get_include()>
from sklearn.tree._tree cimport Node
print("loaded")
【讨论】:
以上是关于CompileError/LinkerError: "command 'gcc' failed with exit status 1" 是啥意思,在 IPython 中运行 %%c的主要内容,如果未能解决你的问题,请参考以下文章