将python文件中的功能转换为cython并在Juypter笔记本中使用

时间:2018-08-18 17:36:56

标签: jupyter-notebook cython cythonize

我正在用python文件编写算法代码,并在我的Jupyter笔记本中使用它,该笔记本位于代码项目路径的根目录。我正试图从我的python文件中对一个python函数进行cythonize,并在Jupyter笔记本中使用它,但尚未成功。

我已经使用cythonize -i来对我的特定python源文件进行cythonize;确实会导致.c.so文件位于原始源文件旁边。因此,我的python函数my_func相对于Jupyter主目录位于源文件foo/bar/my_func.py中,并且现在已成功对其进行了cythonized处理。

源文件不是模块,我喜欢函数式编程,因此我不急于创建对象和模块。

然后我将其放在Jupyter笔记本中:

%load_ext Cython

import sys, os
import pyximport
pyximport.install(reload_support=True)
sys.path.append(os.path.join(os.getcwd(),'foo', 'bar'))

上面的最后一行确实将cython文件的正确完整路径带入sys.path,以防cycyon必需,即使在追求cython之前不必使用python代码。我尚未更改导入函数的方式:

from foo.bar.my_func import my_func # as my_func.py contains my function `my_func`

但是在我的下一个单元中,我尝试在cython单元内部使用my_func,但是它无法加载我的my_func cython函数,而在使用用于无缝工作的cython方式之前加载了该函数:

%%cython

.
.
.
def get_sameness_candidate(text):
    for term in positive_terms:
        term_distance_threshold = my_func(term, 5, 1.5)
.
.
.

cython找不到该功能:

  

cython_magic_5fb62d79423f13c25e1c53012d355e04.pyx:8:28:未声明的名称未内置:my_func

除了不知道如何进行这项工作外,我很高兴学习如何知道导入语句实际上是在加载我的代码的cython还是python版本,我不确定该如何输入一般情况。

谢谢!

0 个答案:

没有答案