用python导入我的cythonized包

用python导入我的cythonized包,python,numpy,cython,distutils,Python,Numpy,Cython,Distutils,我有一个脚本\函数\ 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):

我有一个脚本\函数\ 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'

应该不会引发错误。

我想在另一个python脚本中导入脚本\u函数\u cython,而不是在命令行中。你的两行出现了同样的导入错误。我刚刚测试过它是否有效,所以我需要更多信息。你能在“script\u function\u cython.pyx”和“setup.py”所在的目录中给出ls-lh的输出吗?我给您的命令行测试是检查Python解释器是否可以加载模块,仅此而已。它将以与实际程序相同的方式搜索它。问题在于.so文件位于构建文件夹中,而我确信它是在与setup.py和script\u function\u cython.pyx相同的文件夹中生成的。
--inplace
应将
.so
文件放在当前目录中。如果不是这样的话,还有一个问题
python setup.py install
无论如何都会在此基础上进行常规构建并安装扩展。