1
我在自動生成一些C代碼,將其編譯到共享庫並將其加載到ctypes中,我很好奇,如果任何人都可以啓發我使用Python API的一部分可能需要的東西這樣的庫中(不創建一個完整的模塊)在Python中加載包含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;
}
哪我編譯到一個.so和負載ctypes的。
然而,當我運行上面我得到:
>>> ctypes.CDLL("test.so").test()
138145104
所以我清楚地做錯事。任何想法/提示都會受到歡迎。
SOLUTION: 啊哈,上述的默認操作工作,但ctypes的需要int返回類型,所以是鑄造的PyObject *爲整數。看起來沒有辦法使用ctypes來返回一個任意的python對象,所以生成一個完整的模塊似乎是要走的路。
好的,請逗我。如果你使用Python API,爲什麼你不想編寫一個模塊? –
我只是玩弄一個庫,它可以讓你在C中編寫數字代碼的快速片段並將它們綁定到一個函數名。看起來很浪費,爲每個模塊構建一個模塊,並慢慢污染sys.modules。再加上它更像是一種挑戰。 = d –