У меня есть файловая структура
[CODE DIR]
- foo_1.pyx
- foo_1.pxd
- ...
- foo_n.pyx
с большинством файлов, разделяющих некоторые операторы импорта, т.е. from cython cimport [somePackage]
.
Проблема
Я хочу иметь один общий файл foo_common.pyx
, который содержит общий импорт файлов foo_x.pyx
без копирования большинства из них. foo_common.pyx
будет содержать, например,
[foo_common.pyx]
cimport numpy as np
from cython.parallel cimport prange
....
Я попытался поместить некоторые общие определения в файл pyx
или pxd
, но, похоже, что Cython видит только класс или другие определения, но нет. Возможно ли в Cython иметь общий «подобный заголовку» файл, в котором читаются операторы импорта?
Уточнение
У меня есть файл определений definitions.pxd
:
[definitions.pxd]
cimport cython
У меня есть другой файл foo_1.pyx
[foo_1.pyx]
from definitions cimport *
@cython.cdivision(True)
cdef doing_something (int x):
return x
будет ошибка, заявив, что cdef function cannot take arbitrary decorators
. Изменение cimport
на include
будет работать без ошибок. Почему это поведение отличается?
Оглядываясь назад, я нашел свой ответ относительно того, что может быть в pxd
для совместного использования определений:
It cannot contain the implementations of any C or Python functions, or any Python class definitions, or any executable statements.
от здесь . Кажется, что include - это путь к go, поскольку операторы cimport / import игнорируют любое другое определение; только соответствующие определения C / C ++.