【问题标题】:Cython compilation silently failing in jupyter notebookCython 编译在 jupyter 笔记本中静默失败
【发布时间】:2021-05-21 15:11:09
【问题描述】:

每当我将导入导入 c++ 库时,Cython 编译都会静默失败

%% cython -a --verbose
from libcpp.string cimport string

编译运行,但没有显示注释,如果你定义了一个函数,下一个单元格就找不到它。

输出:

[1/1] Cythonizing /Users/jorenvs/.ipython/cython/_cython_magic_88bf31fdc881aa1e28333abb92cb8079.pyx
building '_cython_magic_88bf31fdc881aa1e28333abb92cb8079' extension
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/lib/python3.7/site-packages/numpy/core/include -I/usr/local/lib/python3.7/site-packages/numpy/core/include -I/usr/local/lib/python3.7/site-packages/numpy/core/include -I/usr/local/lib/python3.7/site-packages/numpy/core/include -I/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/include/python3.7m -c /Users/jorenvs/.ipython/cython/_cython_magic_88bf31fdc881aa1e28333abb92cb8079.c -o /Users/jorenvs/.ipython/cython/Users/jorenvs/.ipython/cython/_cython_magic_88bf31fdc881aa1e28333abb92cb8079.o

【问题讨论】:

标签: python c++ jupyter-notebook jupyter cython


【解决方案1】:

我发现编译失败的原因有很多,而且它们通常是沉默的。如果您无法使用 CLI cython 重现它,找出失败原因的最简单方法是手动运行详细的 clang 命令。这应该会给你确切的错误。

在我的情况下是这样的:

$ clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/lib/python3.7/site-packages/numpy/core/include -I/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/include/python3.7m -c /Users/jorenvs/.ipython/cython/_cython_magic_a57fa1e560b400e6a28c993dfc83bfc5.c -o /Users/jorenvs/.ipython/cython/Users/jorenvs/.ipython/cython/_cython_magic_a57fa1e560b400e6a28c993dfc83bfc5.o

In file included from /Users/jorenvs/.ipython/cython/_cython_magic_a57fa1e560b400e6a28c993dfc83bfc5.c:630:
In file included from /usr/local/lib/python3.7/site-packages/numpy/core/include/numpy/arrayobject.h:4:
In file included from /usr/local/lib/python3.7/site-packages/numpy/core/include/numpy/ndarrayobject.h:12:
In file included from /usr/local/lib/python3.7/site-packages/numpy/core/include/numpy/ndarraytypes.h:1830:
/usr/local/lib/python3.7/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-W#warnings]
#warning "Using deprecated NumPy API, disable it with " \
 ^
/Users/jorenvs/.ipython/cython/_cython_magic_a57fa1e560b400e6a28c993dfc83bfc5.c:633:10: fatal error: 'ios' file not found
#include "ios"
         ^~~~~
1 warning and 1 error generated.

这让我想到了这个问题:Compiling cython with gcc: No such file or directory from #include "ios"

因此,我的解决方案,添加 c++ 语言规范:

%% cython -a --verbose
#distutils: language = c++
from libcpp.string cimport string

【讨论】:

  • 您还应该查看启动 Jupyter 的终端 - 错误消息出现在那里。我认为最新版本的 Cython(3.0alpha 分支?)确实捕获 C/C++ 输出并将其发送到 Jupyter(但我不完全确定)
  • 哈哈,没想到。你是对的,确实如此。不过,我并不总是能在远程服务器上快速访问它。
  • 您可以使用%%cython -+,而不是添加#distutils: language = c++
  • 相关:stackoverflow.com/q/57726729/5769463 只是由于错误,您看不到错误消息。您可以在 Linux 上使用 wurlitzer 将输出重定向到笔记本。
猜你喜欢
  • 2020-09-04
  • 2017-05-22
  • 1970-01-01
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 2022-12-30
  • 2017-07-06
相关资源
最近更新 更多