2012-10-07 13 views
7

私はPythonでラップする必要があります(> 300 public functions>200 numeric constantsはヘッダファイルに#defineと定義されています)。私はdllhファイルを持っています。ライブラリは毎年更新され、今までは後方互換性のある方法で更新されています(関数だけが追加され、定数は数値などが保持されます)。しかし、私はライブラリを制御しないので、私は保証はありません。 pythonのすべての定数と機能をマッピングCライブラリのPythonラッピングの保守性

  1. 、1 PythonでAPIを再定義し、ライブラリへの呼び出しを行う
  2. 1:​​を使用して

    、私はPythonでこれをラップする二つの方法を参照してください。

最初は、ヘッダファイルから(概ね)自動的な方法で行われ、したがって、保守およびアップグレードが容易であることができ、第二には、Pythonコードの多くを必要とするが、使いやすいであろう。

このタイプの問題の経験といくつかの例に基づいて、私はいくつかの意見をいただきたいと思います。

+0

申し訳ありませんが、これは良いことですが、それは本当に明確な質問ではありません。 –

+3

SWIGを見てください。 –

+0

[SIP](http://pypi.python.org/pypi/SIP/4.14)は興味深い解決策です。 –

答えて

4

私は最近、ctypesgenを使用して、SDLと補完ライブラリ(SDL_image、SDL_ttf、SDL_mixer)のctypesラップを作成しました。

私にとって、それはかなりうまくいった。 Python 2.xを生成しますが、 "2to3"ユーティリティを使用して希望の3.xコードを取得できました。

ctypesラッピングをもっと「pythonic」APIの基盤として使用することをお勧めします。これは基本的に私のpslabモジュールで(非常に単純なレベルで)行ったものです。

同様のことをする場合は、それは1つの方法です。

0

ctypesバックエンドを使用してPythonライブラリを管理することは、扱いにくい方法ではありません。明らかに、初期投資は自動化されたツールを使用するよりも大きいですが、残っているAPIははるかに優れているはずです。

もしあなたがそのルートを利用するのであれば、Python APIを完全にCライブラリから分離することを目指してください。 1つのPythonフロントエンドAPIで複数のctypesバックエンドをサポートすることはあまり悪くない - 実行時にクエリを実行し、正しいctypesラッパーモジュールを動的にロードする。私はWindowsとLinux用の異なるdllファイルと.soファイルをラップするためにこれを行ってきましたが、ライブラリのバージョンでも動作します。

関連する問題