关于 .pyx文件的编译和导入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 .pyx文件的编译和导入相关的知识,希望对你有一定的参考价值。

参考技术A Date: 2020/03/21

Author: CW

前段时间学习了  NMS(非极大值抑制) 的各种版本实现,其中包括 Cython 版本,需要对 .pyx文件进行编译,在此针对学习内容记录一番。

    首先确保安装了Cython。

    以文件名为 nms.pyx 为例,新建一个用于编译的.py文件,比如 setup.py,内容如下图所示。

    接着执行该py文件: python setup.py build_ext --inplace 即可完成编译, 最终会生成一个 .c文件。

    若编译过程中报错: numpy/arrayobject.h”: No such file or directory ,则需要修改下setup.py文件,内容变为如下:

    红框所示为增加的内容,最后再按照上述方法执行该文件进行编译即可。

    和正常py模块一样导入即可,比如要导入以上的 nms.pyx,则为 import nms。

    如提示无法导入,则尝试在 import 相应包之前添加如下内容:

         import pyximport

          pyximport.install()

python / cython编译pyx:致命错误:capsule.h:没有这样的文件或目录

【中文标题】python / cython编译pyx:致命错误:capsule.h:没有这样的文件或目录【英文标题】:python/cython compiling pyx: fatal error: capsule.h: No such file or directory 【发布时间】:2015-11-05 02:02:16 【问题描述】:

我最近在一个 python 项目中工作,我需要导入一些 .pyx 文件。

但是,我很难将其导入为 .pyx 并使用以下行进行编译:

import pyximport
pyximport.install()
from . import kl

错误是

fatal error: capsule.h: No such file or directory

而在kl.pyx文件中,capsule.h的用法如下:

cdef extern from "capsule.h":
     void* Capsule_AsVoidPtr(object ptr)

我不确定我应该做什么。请帮我一点忙。

或者,python脚本是否可以直接导入已编译的.c(在Linux中)文件,而不是导入.pyx并编译它? 当我用命令行编译它时,它编译成功,但我不知道我的 IDE(PyCharm)如何导入那个.c 文件。

非常感谢。

【问题讨论】:

【参考方案1】:

你错过了一些库,你需要安装 capsule.h 的源代码。

【讨论】:

以上是关于关于 .pyx文件的编译和导入的主要内容,如果未能解决你的问题,请参考以下文章

关于pyx文件的修改

Cython 编译将文本附加到文件名,如何摆脱它?

如何手动编译使用 C++ 的 Cython 代码?

在 google colab 中从 .pyx 文件导入

关于制作 Python .pyx 文件的教程的问题

关于导入geoserver 源码到Eclipse编译运行