如何获取编译代码(如C)并将其用作Python模块

j9per5c4  于 2023-08-03  发布在  Python
关注(0)|答案(1)|浏览(155)

比如说我有一些C语言的代码,它又快又具体,但是我想管理它在Python中的调用方式。我见过用C语言编写的Python模块,比如numpy,我该怎么做呢?这对于所有的编译语言都是可能的,比如rust/go等等。
例如,我有一个非常快的自定义数据库orm在c与多线程和所有的好东西。如何将其转换为Python库并使用它?我希望这是因为Python是不是一样快,或作为通用的C等。
如果可以的话后面怎么用?

7lrncoxx

7lrncoxx1#

步骤如下:

  • 用C写文件
  • 编译并生成共享库(.so
  • 使用ctypes加载
  • 调用那些方法
    详细回答:
  • 用C语言写文件:*
// test.c
int add_numbers(int a, int b) {
    return a + b;
}

字符串

  • 编译生成共享库 *:
gcc -shared -o test.so test.c

  • 使用ctypes加载 *:
import ctypes

lib = ctypes.CDLL('./test.so')

  • 调用这些方法(这一步开销最大)*
lib.add_numbers.argtypes = (ctypes.c_int, ctypes.c_int)
lib.add_numbers.restype = ctypes.c_int

result = lib.add_numbers(3, 4)
print(result)

好读:

  • https://docs.python.org/3/library/ctypes.html
  • https://en.wikipedia.org/wiki/Application_binary_interface
  • NABI(Native Application Binary Interface)
    注意:为DB做这件事需要大量的注意力和实验;因为你需要编译它。相信我,这需要很多时间。然后你需要在Python中添加这些方法 Package 器。
  • 是的,你也可以做相反的事情,你需要在你的程序中有<Python.h>头。但相信我,这是更多的工作。但如果出于某种原因需要,是的,至少有一种方法,当然。

相关问题