在Python中,我們可以把代碼編譯為動態鏈接庫(.so文件),這樣可以使代碼在運行時更加高效。下面介紹如何將Python代碼編譯為.so文件。
首先,需要安裝cffi模塊。可以使用pip命令進行安裝:
pip install cffi
編寫Python代碼,將其保存為example.py:
def add(a, b): return a + b
然后,我們需要編寫一個C代碼,實現Python代碼中的函數。將C代碼保存為example.c:
#include <Python.h> static PyObject* add(PyObject* self, PyObject* args) { int a, b; if (!PyArg_ParseTuple(args, "ii", &a, &b)) return NULL; return Py_BuildValue("i", a + b); } static PyMethodDef ExampleMethods[] = { {"add", add, METH_VARARGS, "Add two integer numbers"}, {NULL, NULL, 0, NULL} }; static struct PyModuleDef examplemodule = { PyModuleDef_HEAD_INIT, "example", NULL, -1, ExampleMethods }; PyMODINIT_FUNC PyInit_example(void) { return PyModule_Create(&examplemodule); }
注意,add函數的輸入參數是一個PyObject類型的args,需要使用PyArg_ParseTuple函數對其進行解析。
然后,我們需要將C代碼編譯為.so文件。可以使用以下命令進行編譯:
gcc -o example.so -shared -fPIC example.c -I/usr/include/python3.5m -lpython3.5m
注意,編譯時需要指定Python的頭文件和庫文件。
最后,我們可以在Python中使用編譯好的.so文件,例如:
import example print(example.add(1, 2))
輸出結果為:3
上一篇python 編譯動態庫
下一篇c 前臺解析json