0

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

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

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

现在,这对我来说非常有效。但是,我必须在该过程中经历两个执行步骤(生成.so文件,然后实际运行 python 脚本并调用 C API)。

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

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

4

2 回答 2

0

你不能这样做吗?

import os
os.system('command to build your .so here') 
...
import what_ever_you_need
...
于 2020-05-26T23:43:56.743 回答
0

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

于 2020-05-27T06:16:05.887 回答