Несколько месяцев назад я написал этот скелетный пакет для связи библиотеки C с Python с использованием NumPy и Cython. Когда я его создал, компиляция работала нормально, и я смог использовать код на C из Python.
Однако теперь кажется, что мои версии Python, Cython или NumPy изменились так, что пакет больше не будет компилироваться. Произошло ли изменение API в одном из этих пакетов, о которых я не знаю? Мой заголовочный файл .pxd
не найден, и я получаю ряд ошибок компиляции относительно использования with nogil
, таких как:
Error compiling Cython file:
------------------------------------------------------------
...
cdef long total
cdef long n = x.shape[0]
# If we want to use "nogil", we have to use "x.data", not "x".
with nogil:
total = sum_array(x.data, n)
^
------------------------------------------------------------
src/cython_wrapper.pyx:32:25: Coercion from Python not allowed without the GIL
Но важно эти ошибки не возникают с предыдущими версиями Cython (0.27.1) и NumPy (1.13.3).
Вот шаги, чтобы воспроизвести это:
Старая среда
virtualenv -p python3.6 old
cd old
source bin/activate
pip install cython==0.27.1 numpy==1.13.3
git clone https://github.com/GjjvdBurg/NumPy_C_Extension
cd NumPy_C_Extension
rm src/cython_wrapper.c
python setup.py build_ext -i
# Compilation proceeds without errors
Новая среда
virtualenv -p python3.6 new
cd new
source bin/activate
pip install cython==0.28.3 numpy==1.14.5
git clone https://github.com/GjjvdBurg/NumPy_C_Extension
cd NumPy_C_Extension
rm src/cython_wrapper.c
python setup.py build_ext -i
# Compilation fails
Любая помощь будет принята с благодарностью!