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
Я хотел бы импортировать свой скрипт_function_cython в другой скрипт python, а не в командной строке. И ваши две строки поднимают ту же ошибку импорта. – floflo29
Я только что проверил, что он работает, поэтому мне потребуется дополнительная информация. Можете ли вы дать вывод 'ls -lh' в каталоге, где расположены« script_function_cython.pyx »и« setup.py »? Тест командной строки, который я дал вам, - это проверка того, что интерпретатор Python может загрузить модуль, то есть все. Он будет искать его так же, как и фактическая программа. –
Проблема возникла из-за того, что файл .so был расположен в папке сборки, в то время как я убедился, что он был сгенерирован в той же папке с setup.py и script_function_cython.pyx. – floflo29