繁体   English   中英

使用 CFFI/Cython 动态包装 C 代码和 python

[英]Wrapping C code with python on the fly with CFFI/Cython

我正在开发一个项目,该项目需要我在 Python 中为我需要从 Python 调用的 C 库创建一些包装器。 对于上下文,我使用的 C 库是一堆 header 文件 (.h) 和静态链接库文件 (.a)

我决定使用 CFFI 或 Cython 来完成我的工作。 对于 CFFI,我遵循了与此类似的示例 -将 C 代码与 CFFI 连接,而这对于 Cython - 使您的 C 库可从 ZA7F5F35426B927411FC9231B563821 7 通过包装调用它 现在我在这两个模块中尝试过的小示例程序或多或少都有以下步骤

  • 创建接口代码以调用 C API
    • 在 CFFI 中,它是一个 python 文件,用于声明所需的 C 函数和头文件
    • 在 Cython 中,它是一个 .pyx 文件和对 setup.py 的修改
  • 构建接口代码以生成接口胶水代码的.so文件。
  • 通过从.so文件导入接口库,从不同的 python 脚本调用包装函数。

现在,这对我来说非常有效。 But, I'll have to go through two execution steps in the process (generating the .so file, and then actually running the python script with the C API being called).

我需要知道是否有办法在一个执行步骤中完成上述所有操作。 就像,我想运行我的最终 python 脚本,它应该构建接口代码并在一次执行中即时导入它

有关更多上下文,我尝试了 SWIG,但无法找到一种方法来包装.a静态链接库。 ctypes 也是如此。

你不能这样做吗?

import os
os.system('command to build your .so here') 
...
import what_ever_you_need
...

对于 CFFI,您只需要在运行时执行现在在构建器脚本中的代码。 将其全部移动到 function 中,然后您有一个 function 可以在需要时调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM