Cython NameError: name 'blah ' 未定义。Jupyter中的Cython魔法无法正常工作?



我正试图使用cython使一些代码在Jupyter中更快地运行,但由于某种原因,它在运行%%cython单元后无法"记住"函数。这似乎与我在网上找到的任何其他例子都没有问题(例如:https://jakevdp.github.io/blog/2017/12/11/live-coding-cython-ising-model/(。我使用的是Cython 0.29.15和python 3.7.3。

示例:

%load_ext cython
%%cython
def function(x):
y = 2*x
return y
function(1)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-4-d7befaefa369> in <module>
----> 1 function(1)
NameError: name 'function' is not defined

我尝试过cpdefcdef,但它们提供了相同的错误输出。

另一个例子:

%%cython 
cpdef int a = 0
for i in range(10):
a += i
print(a)

没有打印

下一个单元格:

print(a)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-12-bca0e2660b9f> in <module>
----> 1 print(a)
NameError: name 'a' is not defined

我开始工作了。

%load_ext cython
%%cython
def function(x):
y = 2*x
return y
function(1)
2

可能是安装有问题。我不确定,我是这方面的新手,但

以下是我所做的:

。尝试重新安装cython,但没有成功。

。尝试重新安装anaconda3--不起作用。

。注意到我的终端正在使用python2,然后将其切换为python3(https://dev.to/irfnhm/how-to-set-python3-as-a-default-python-version-on-mac-4jjf)

。然后重新安装anaconda3(https://towardsdatascience.com/how-to-successfully-install-anaconda-on-a-mac-and-actually-get-it-to-work-53ce18025f97)

。现在cython工作了

我不知道为什么这会奏效(再说一遍,新手(,但希望这能在未来对某人有所帮助。

我也犯了同样的错误,我正在编写自己的解决方案,希望能帮助一些迷失的灵魂。

与OP类似,我在%%cython单元格中声明了一个函数,但当我打印dir()时,在本地范围中找不到这样的函数。在cython的文档中,我发现了一个名为--cplus(也称为-+(的标志,它输出C++而不是C,这就是我的问题。

但由于某种原因,编译默默地失败了,这是一个问题https://github.com/cython/cython/issues/3751#issuecomment-679162419。

此外,调试错误的另一种方法是将代码迁移到jupyter之外的普通.py文件中,然后编译它。

最新更新