Python Cython如何从另一个包导入
我正在尝试扩展Python Cython如何从另一个包导入,python,scikit-learn,cython,Python,Scikit Learn,Cython,我正在尝试扩展sklearn.neights.dist_metrics模块中的一些sklearn类。但是,整个模块都是用Cython编写的,显然,我想用我的自定义类执行的操作必须实现cdef dist(而不是def dist) 因此,在我自己的模块中(实际上,我现在正在使用jupyter%%cython),我想在cython中实现我的自定义类,根据需要实现cdef dist方法。但是,在同一模块中,sklearn.neights.typedefs模块中,以及我需要导入的其他模块中,还有许多其他的
sklearn.neights.dist_metrics
模块中的一些sklearn
类。但是,整个模块都是用Cython编写的,显然,我想用我的自定义类执行的操作必须实现cdef dist
(而不是def dist
)
因此,在我自己的模块中(实际上,我现在正在使用jupyter%%cython
),我想在cython中实现我的自定义类,根据需要实现cdef dist
方法。但是,在同一模块中,sklearn.neights.typedefs
模块中,以及我需要导入的其他模块中,还有许多其他的cdef
内容。当我试图导入这些东西时,会出现各种各样的错误
当我尝试简单的导入时
:
%%cython
import numpy as np
from sklearn.neighbors.dist_metrics import DistanceMetric
from sklearn.neighbors.typedefs import DTYPE_t, ITYPE_t
cdef class NewDistance(sklearn.neighbors.DistanceMetric):
cdef inline DTYPE_t dist(self, DTYPE_t* x1, DTYPE_t* x2,
ITYPE_t size) nogil except -1:
return 5
我得到的错误表明,一旦事物被“pythonized”,我就不能在“cython”定义中使用它们:
Error compiling Cython file:
...
First base of 'KernelDistance' is not an extension type
...
'DTYPE_t' is not a type identifier
有一个cimport
关键字,因此:
%%cython
import numpy as np
from sklearn.neighbors.dist_metrics cimport DistanceMetric
from sklearn.neighbors.typedefs cimport DTYPE_t, ITYPE_t
cdef class NewDistance(sklearn.neighbors.DistanceMetric):
cdef inline DTYPE_t dist(self, DTYPE_t* x1, DTYPE_t* x2,
ITYPE_t size) nogil except -1:
return 5
annnnddd
Error compiling Cython file:
....
'sklearn/neighbors/dist_metrics.pxd' not found
....
'sklearn/neighbors/typedefs.pxd' not found
如何从其他库导入cython文件?我尝试将一个
\uuuu init\uuu.pxd
添加到sklearn
文件夹中,另一个添加到sklearn/neights
文件夹中,然后重新编译sklearn,但是这似乎没有帮助。是否在自定义目录中安装了sklearn
?@GhasemNaddaf$pip3 install--user-U。我使用源目录中的安装它。这就把它放在/home/me/.local
中,为了cimport某物,该物的定义必须在pxd文件中。当scikit learn安装时,它(据我所知)不会复制pxd文件。为了实现这一点,您需要通过添加pxd文件来修改scikit learn安装,或者需要修改scikit learn setup.py脚本以将pxd文件复制为包_数据。以下是相关问题: