【发布时间】:2020-02-28 17:22:00
【问题描述】:
我有一个文件结构
[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. 来自here。由于 cimport / import 语句忽略了任何其他定义,因此似乎 include 将是可行的方法;只有 C/C++ 相关定义。
【问题讨论】:
-
from cython cimport ...?您实际上并没有将您的模块命名为cython是吗?因为这会立即与 Cython 编译器及其指令等发生冲突?
标签: python cython python-import