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文件复制为包_数据。以下是相关问题: