Cython: ошибка при импорте файла .pxd

#python-3.x #cython

Вопрос:

Я создаю функцию для решения дифференциальных уравнений. Структура моего пакета выглядит следующим образом:

 package
 |- integrate
     |- signature.pxd
     |- rk4.pyx
     |- euler.pyx
 

signature.pxd содержит шаблон функции, которая должна быть определена и указана во входных данных для rk4.pyx и euler.pyx .

Содержание signature.pxd является:

 import numpy as np
cimport numpy as np

ctypedef np.float64_t FLOAT

cdef class ProblemOde:
    cpdef np.ndarray[FLOAT, ndim=1] evaluate(self, double t, np.ndarray[FLOAT, ndim=1] y):
        return np.ndarray([])
 

Моя проблема в том, что я не могу импортировать его в rk4.pyx и euler.pyx . Я не могу использовать ни абсолютный, ни относительный импорт, и если я напишу:

 cimport signature
from signature cimport ProblemOde
 

Я получаю ошибку: 'signature.pxd' not found

Чего мне не хватает? Как я могу это сделать?

Большое спасибо!

РЕДАКТИРОВАТЬ: здесь setup.py

 # built-in/generic imports
import os
from distutils.core import setup

# third-party imports
from Cython.Build import cythonize
import numpy as np

# list of packages eopack
__module_dir__ = os.path.abspath(os.path.dirname(__file__))
packages_eopack = [os.path.join(__module_dir__, 'package', 'integrate', 'rk4.pyx'),
                   os.path.join(__module_dir__, 'package', 'integrate', 'euler.pyx')]

# compiler directives
directives = {'language_level': '3',
              'always_allow_keywords': True}

# compile
setup(ext_modules=cythonize(packages_eopack, compiler_directives=directives, annotate=True),
      include_dirs=[np.get_include()])
 

Комментарии:

1. Вы создали библиотеку из исходных файлов cython, не так ли?

2. Поскольку это проблема компиляции, можете ли вы поделиться своими файлами/методом компиляции? ( setup.py /…)

3. @ibarrond пожалуйста, ознакомьтесь с ПРАВКОЙ. Спасибо.

4. Откуда берется package переменная?

5. Извините, это строка, так как это пример, который я скопировал, вставил и изменил соответствующие части. Теперь все правильно.