2016-10-02 10 views
1

У меня есть файл script_function_cython.pyx, содержащий одну функцию:Импорт мой cythonized пакет в Python

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

с --inplace сборки нет необходимости в установке. Вам нужно будет импортировать из каталога проекта.

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

не должно вызывать ошибки.

+0

Я хотел бы импортировать свой скрипт_function_cython в другой скрипт python, а не в командной строке. И ваши две строки поднимают ту же ошибку импорта. – floflo29

+0

Я только что проверил, что он работает, поэтому мне потребуется дополнительная информация. Можете ли вы дать вывод 'ls -lh' в каталоге, где расположены« script_function_cython.pyx »и« setup.py »? Тест командной строки, который я дал вам, - это проверка того, что интерпретатор Python может загрузить модуль, то есть все. Он будет искать его так же, как и фактическая программа. –

+0

Проблема возникла из-за того, что файл .so был расположен в папке сборки, в то время как я убедился, что он был сгенерирован в той же папке с setup.py и script_function_cython.pyx. – floflo29