我正试图使用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
我尝试过cpdef
和cdef
,但它们提供了相同的错误输出。
另一个例子:
%%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文件中,然后编译它。