PythonアプリケーションからCライブラリを呼び出したいのですが。API全体をラップするのではなく、自分のケースに関連する関数とデータ型のみをラップします。それを見ると、私は3つの選択肢があります。
- Cで実際の拡張モジュールを作成します。おそらくやり過ぎです。また、拡張の記述を学習するオーバーヘッドを回避したいと思います。
- Cythonを使用して、CライブラリからPythonに関連パーツを公開します。
- Pythonですべてを
ctypes
行い、外部ライブラリとの通信に使用します。
2)と3)のどちらが良い選択かわかりません。3)の利点は、それctypes
が標準ライブラリの一部であり、結果のコードが純粋なPythonになることです。ただし、その利点が実際にどれほど大きいかはわかりません。
どちらを選択しても、長所/短所はありますか?どちらのアプローチをお勧めしますか?
編集:すべての回答に感謝します。同様のことをしたいと考えているすべての人に役立つリソースを提供します。もちろん、決定はまだ1つのケースに対して行われることになっています。「これは正しいことです」という種類の答えはありません。私自身のケースでは、おそらくctypesを使用しますが、他のプロジェクトでCythonを試すことも楽しみにしています。
正解は1つではないため、1つを受け入れることはいくぶん恣意的です。私はFogleBirdの回答を選択しました。これはctypesに対するいくつかの優れた洞察を提供し、現在、最も投票された回答でもあるからです。ただし、概要を理解するためにすべての回答を読むことをお勧めします。
再度、感謝します。