我正在用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版本,我不确定该如何输入一般情况。
谢谢!