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

时间:2015-03-10 19:11:56

标签: python include 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时,我收到一条消息,说明找不到该文件:

  

致命错误:/liboptv/include/parameters.h:没有这样的文件或目录

感谢。

1 个答案:

答案 0 :(得分:3)

如上所述,以下列方式之一包含头文件目录的路径更为健壮:

  • -I编译器选项
  • include_dirs setuptools参数
  • INCLUDE环境变量

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

/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":

等等。