加载包含Python API代码的Python共享库?

2024-09-28 23:27:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试自动生成一些C代码,将其编译到一个共享库中并用cype加载它,我很好奇是否有人能启发我在这样一个库中使用Python API的某些部分可能需要什么(而不需要创建一个完整的模块)

例如,我有一些快速的代码被破解在一起:

PyObject* test() {
  PyObject* to_ret = NULL;
  PyGILState_STATE gstate = PyGILState_Ensure();

  to_ret = Py_BuildValue("i", 1+2);

  PyGILState_Release(gstate);

  return to_ret;
}

我编译成a.so并用ctypes加载。在

但是,当我运行上述程序时,我得到:

^{pr2}$

所以我显然做错了什么。欢迎有任何想法/建议。在

解决方案: 啊哈,上面的可以工作,但ctypes在默认情况下需要一个int返回类型,因此将PyObject*强制转换为整数。似乎没有办法使用ctypes返回任意的python对象,因此生成一个完整的模块似乎是一种方法。在


Tags: 模块to代码pytestapictypesnull
1条回答
网友
1楼 · 发布于 2024-09-28 23:27:46

这似乎可以在python2.7中实现,它支持ctypes.py_object作为一种类型。我根据您的示例代码构建了一个库,并使用了以下代码:

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import *
>>> t = CDLL('test').test
>>> t.restype = py_object
>>> t()
3

相关问题 更多 >