gpt4 book ai didi

cython - 如何使用 cython 定义文件(pxd)而不使其成为扩展名?

转载 作者:行者123 更新时间:2023-12-04 05:18:55 24 4
gpt4 key购买 nike

创建 pxd 定义文件的最简单方法是什么,它只是收集通过 pyx 文件复制的 cdef,而不创建新的扩展名?

我的情况如下:我想在 pxd 文件 (hp/src/common.pxd) 中收集一些外部 cdef。我还添加了一些非外部 cdef,其实现在 common.pyx 中。

在另一个 pyx 文件(hp/src/_lib.pyx)中,我把它变成了一个扩展,我从 common 中导入了一些东西。

在 setup.py 文件中,我创建了以下扩展:

Extension('hp._lib', 
['hp/src/_lib.pyx'],
language='c++'),

通过这样做,不会创建 common.cpp 文件,因此看起来依赖项不会自动处理。这是第一个问题。

然后,手动运行 'cython --cplus common.pyx' 在目录 hp/src 中正确创建一个 common.cpp 文件,如果我将 'hp/src/common.cpp' 添加到扩展源列表中,命令python setup.py 毫无怨言地安装了所有东西,但是,导入模块 hp 会触发 ImportError: No module named common... from _lib.cpp...
我被困在这里。任何的想法?

最佳答案

您可以使用 include 包含来自另一个文件的 Material 。陈述。

请参阅此处的文档:

http://docs.cython.org/src/userguide/language_basics.html#the-include-statement

如果您在 common.pxd 中有外部定义和 commond.pyx 中的实现您需要将它们都包括在内。例如,在 _lib.pyx :

include "common.pxd"
include "common.pyx"

然后这些文件的内容将被编译到您的 _lib 中。模块,就好像它们在那时被文本包含在内。即 common.c文件不会生成,而是包含在 _lib.c 中.

Cython 编译器在确定 .c 是否包含更改时无法识别。模块的文件需要重新生成,因此请记住在重新编译之前将其删除。

关于cython - 如何使用 cython 定义文件(pxd)而不使其成为扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13907010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com