#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. Извините, это строка, так как это пример, который я скопировал, вставил и изменил соответствующие части. Теперь все правильно.