![](/img/trans.png)
[英]Can python SWIG bind a library in the absence of the library's source code?
[英]Bind a python library TO C
我想做的是與大多數人想要做的相反 :我有一個用Python編寫的庫,我想讓它可用於C(可能還有其他語言)。
我知道對此的典型答案是使用C語言的Python庫,即:
#include <Python.h>
int
main(int argc, char *argv[])
{
Py_Initialize();
PyRun_SimpleString("from time import time,ctime\n"
"print 'Today is',ctime(time())\n");
Py_Finalize();
return 0;
}
(來源: http : //docs.python.org/extending/embedding.html#very-high-level-embedding )
但是,這對我來說似乎不太理想:
相反,我想要的是一種將我的庫綁定到很多語言的方法,包括C.我不關心自動包裝器生成:我的庫非常簡單,所以我可以編寫膠水代碼。
目前,我提出的唯一解決方案是使用與上面類似的代碼將我的庫綁定到C.然后使用SWIG將C庫綁定到其他語言。
還有更好的嗎?
Well C是編程的Lingua franca 。 所以我想說你的方法是正確的。 為C創建綁定,然后使用SWIG等工具和其他語言的FFI綁定到C.
想到的只有另外一個想法。 今天我們看到HTTP正在成為所有API和接口的新Lingua franca 。 因此,人們可以考慮創建一個用python編寫的小型web服務,提供一些REST接口。 但顯然這只在某些情況下才有意義。
當然,一旦你決定在一個單獨的進程中運行python lib,就會有像進程通信一樣的所有可能性,如命名管道或套接字以及像Apache Thrift , Google Protocol Buffers或0MQ這樣的工具包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.