【问题标题】:Correct way to import file from different directory in Cython从 Cython 中的不同目录导入文件的正确方法
【发布时间】:2015-03-15 21:23:48
【问题描述】:

我有一个 .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:没有这样的文件或目录

谢谢。

【问题讨论】:

  • 嗯,我从未尝试过,但我认为你应该在这里采取不同的方式。与其尝试提​​供完整路径,不如尝试将自定义头文件的目录添加到编译器选项中。 IIRC,在 setup.py 文件中声明扩展模块时有一个 include_dirs 选项。

标签: python include cython


【解决方案1】:

如上所述,以以下方式之一包含标头目录的路径更加健壮:

  • -I 编译器选项
  • include_dirssetuptools参数
  • 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":

等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-10
    • 2018-03-11
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多