在 Cython 中从不同目录导入文件的正确方法

Correct way to import file from different directory in Cython

我有一个 .pxd 文件,其中包含另一个 c 头文件中的变量声明,从以下代码可以理解:

cdef extern from "parameters.h":
    ctypedef struct mm_np:
        int nlay
        double n1
        double n2[3]
        double d[3]
        double n3
        int lut

当文件 parameters.h 与 cythonizing 脚本位于同一文件夹中时 运行 - 一切都很完美。

问题: 当文件 "parameters.h" 位于不同的目录而不是 .pxd 文件所在的目录时,如何执行相同的包含?

我尝试将这段代码的第一行替换为

cdef extern from "/liboptv/include/parameters.h":

这不起作用,当我使用 cythonize 时,我收到一条消息,指出找不到该文件:

fatal error: /liboptv/include/parameters.h: No such file or directory

谢谢。

如上所述,以其中一种方式包含 headers' 目录的路径更加可靠:

  • -I 编译器选项
  • include_dirs 设置工具参数
  • INCLUDE 环境变量

您还可以使用上述选项之一中包含的一个路径的相对导入。例如,如果您想要包含 headers:

/usr/include/test/soft1/mod1/header1.h
/usr/include/test/soft1/mod2/header2.h
/usr/include/test/soft1/mod3/header3.h

您可以添加包含所有这些路径的子文件夹:

gcc ... -I/usr/include/test/soft1

并且在 Cython 中使用相对导入:

cdef extern from "mod1/header1.h":
...
cdef extern from "mod2/header1.h":

等等。