2012-05-16 5 views
9

私がしたいのは、と反対のです。私はPythonで書かれたライブラリを持っていて、C言語(と他の言語も可能) 。PythonライブラリへのバインドTOC

私はこれまで、一般的な答えは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言語を含む多くの言語にバインドする方法です。 自動ラッパーの生成については気にしません。私のライブラリはかなりシンプルなので、グルーコードを書くことができます。

私が思いついた唯一の解決策は、上記のようなコードを使用してライブラリをCにバインドすることです。次にSWIGを使用して、Cライブラリを他の言語にバインドします。

もっと良い情報がありますか?

答えて

4

よくCはプログラミングのLingua francaです。だから私はあなたのアプローチが正しいと言います。 Cのバインディングを作成し、SWIGや他の言語のFFIなどのツールを使用してCにバインドします。

他にも1つの考えがあります。今日、HTTPはすべての種類のAPIとインターフェース向けに新しいLingua francaとして登場しています。そこで、Pythonで書かれた小さなWebサービスをいくつかのRESTインターフェースを作成することについて考えることができます。しかし、これは明らかに特定の設定では意味があります。もちろん

あなたが別のプロセスであなたのpythonのlibを実行することを決定した後、Apache ThriftGoogle Protocol Buffersまたは0MQのような名前付きパイプやソケットやツールキットなどのプロセス間通信のすべての可能性があります。

+0

まあ、私はデーモンとして動作するライブラリとして、今はあまりファンキーではない(少なくとも今はない)ものは何も必要ありません。 私は手動でPythonのものに接続するCライブラリを書くつもりだと思います。私はSWIGを他の言語に使ってバインディングを作成します。 – boyska

関連する問題