在python中导入我的cythonized包

时间:2016-10-02 13:37:22

标签: python numpy cython distutils

我有一个包含单个函数的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

1 个答案:

答案 0 :(得分:1)

使用n版本,无需安装。您需要从项目目录导入。

--inplace

不应该引起错误。