在 python 中导入我的 cythonized 包

Import my cythonized package in python

我有一个包含单个函数的 script_function_cython.pyx 文件:

import numpy as np
import scipy.misc as misc
import matplotlib.pyplot as plt

def my_function(img, kernel):

    assert kernel.shape==(3, 3)

    res = np.zeros(img.shape)

    for i in range(1, img.shape[0]-1):
        for j in range(1, img.shape[1]-1):

            res[i, j] = np.sum(np.array([[img[i-1, j-1], img[i-1, j], img[i-1, j+1]],
                                 [img[i, j-1], img[i, j], img[i, j+1]],
                                [img[i+1, j], img[i+1, j], img[i+1, j+1]]])*kernel)

    return res






if __name__ == '__main__':

    kernel = np.array([[-1, -1, -1], [-1, 3, -1], [-1, -1, -1]])
    img = misc.face()[:256, :256, 0]
    res = my_function(img, kernel)

    plt.figure()
    plt.imshow(res, cmap=plt.cm.gray)

我因此创建了一个 setup.py 文件:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize('script_function_cython.pyx'),  
)

然后,我编译它:

python setup.py build_ext --inplace

并安装它:

python setup.py install

但是,当我尝试进一步导入它时,

import script_function_cython

我得到:

ImportError: No module named script_function_cython

使用 --inplace 版本无需安装。不过,您需要从项目目录导入。

python setup.py build --inplace
python -c 'import script_function_cython'

应该没有错误。