私はそれをサポートするいくつかのサブライブラリを持つかなり大きなC++ライブラリを持っています。そのすべてをPython拡張にする必要があります。私はdistutilsをクロスプラットフォームにする必要があるので使用していますが、より良いツールがあれば私は提案をすることができます。Python non-trivial C++ Extension
distutilsに最初にサブライブラリをコンパイルし、メインライブラリから拡張子を作成するときにそれらをリンクさせる方法はありますか?
私はそれをサポートするいくつかのサブライブラリを持つかなり大きなC++ライブラリを持っています。そのすべてをPython拡張にする必要があります。私はdistutilsをクロスプラットフォームにする必要があるので使用していますが、より良いツールがあれば私は提案をすることができます。Python non-trivial C++ Extension
distutilsに最初にサブライブラリをコンパイルし、メインライブラリから拡張子を作成するときにそれらをリンクさせる方法はありますか?
私はこの製品で巨大なC++ライブラリを使っています。バインディングを書く作業を自動化するのに役立ついくつかのツールがあります。最も一般的なものはSWIGです。これはしばらくの間行われていて、多くのプロジェクトで使用されていて一般的にうまく機能します。
SWIG(私の意見では)に対する最大の問題は、SWIG自体のC++コードベース自体が非常に軽いことです。それはSTLの前に書かれていて、それはちょうど年老いてきつくて独特な半ダイナミック型システムです。これは、コアに何らかの変更を加えなければならない限り(私はかつてdoxygen - > docstring変換を追加しようとしたことがない限り)、それほど重要ではありません。人々はまた、SWIGが生成したコードはそれほど効率的ではないと言いますが、私にとっては、SWIGがそれを心配するだけのボトルネックとなることは決してありませんでした。
SWIGがあなたのボートを浮かせていない場合は、boost.pythonも人気があり、あなたのC++コードですでにブーストライブラリを使用している場合には、良い選択肢になります。欠点は、コンパイル時に重くなることです。なぜなら、それはかなり多くのC++テンプレートベースだからです。
これらのツールはどちらも、公開されるものとそれがどのように行われるかを定義するためにいくつかの作業を行う必要があります。 SWIGでは、C++ヘッダーのようなインターフェイスファイルを用意していますが、SWIGに複雑なタイプの変換方法を伝える特別な指示があります。これらのインターフェイスを書くことは面倒な作業なので、pygccxml自動的に生成されます。
このパッケージの作者は実際にあなたが好きかもしれない別のエクステンションを書きました:py++。このパッケージは2つのことを行います:自動的にバインディング定義を作成し、boost.pythonに供給してPythonバインディングを生成することができます。基本的にはほとんどの人にとって完全なソリューションです。もしあなたが特別に、あるいは難しい要求を満たす必要がなければ、そこから始めたいと思うかもしれません。
参照として有用であることが分かるかもしれないいくつかの他の質問:
また、便利なPythonのための結合生成ツールのthis comparisonを見つけることができます。アレックスがコメントで指摘しているように、それはむしろ古いものですが、少なくともあなたに景観についてのいくつかの考えがあります。
ビルドの方法については、より高度なビルドツールそのdistutils:もしあなたがPythonに固執したいのであれば、私はフレームワークとしてが行く方法だと言うでしょうが、それは地獄のように遅いと信じています:私はすでにそこに戻ってきました!)..フレームワークとしてWafを強くお勧めします.itはちょっとした学習が必要ですが、あなたの周りに頭を浮かべると、それは非常に強力です。純粋なPythonであるため、ビルドプロセスの一部として持っている他のPythonコードと完全に統合されます(たとえば、Py ++を最後に使用するなど)...
"this comparisson"とあなたが引用したCERNの報告書は6歳以上であるため、大きな塩(!)で撮影する必要があります。特にSIPは、長年に亘って**多くの**進化を遂げてきました。 –