0

私は、WindowsベースのVBアプリケーションの束で現在使用している小さなC++ライブラリとのインターフェイスを希望するクライアント向けにLinuxベースのWebサービスを構築しているPythonの人です。

彼らは、ライブラリがかなり単純であり(私が推測する限り)、LinuxのPythonで使用できるように、ライブラリをコンパイルして配信するのに最適な方法を知っている必要があることを保証してくれました。

ライブラリやその他のオプション(SWIGなど)について少し読んだことがありctypesますが、何らかの理由で、コンセプトに頭を悩ませることができず、必要なものを伝える方法がわかりません。

などで書き直してもらうのは間違いないPython.hので、Linuxで.soとしてコンパイルしてPythonにインポートするだけの方法があるといいのですが。そのようなことは可能ですか?これをどのように達成しますか?

4

2 に答える 2

2

いいえ、そのようなことは不可能です。

Pythonバインディングを提供する必要があるか、提供します。次のいずれかの方法でこれを行うことができます。

  • <Python.h>C拡張モジュールを直接作成するために使用します。
  • 拡張モジュールの作成をはるかに簡単にするために使用boost::pythonします(特に、CではなくC ++を使用している場合)。
  • SWIG、SIP、または同様のツールを使用して、拡張モジュールの書き込みを部分的に自動化します。
  • CythonCやC++ではなく、Pythonのような言語で拡張モジュールを作成するために使用します。
  • ctypesPython内から使用します。

非常に単純な場合(特に、実際にCインターフェイスをC ++コードにエクスポートしている場合)、ctypesおそらく最も簡単な解決策です。それ以外の場合は、最初にCythonを確認することをお勧めします。しかし、いずれにせよ、解決策の1つに頭を悩ませる必要があります。あるいは、代わりにそれを実行するように説得する必要があります。

于 2013-01-12T02:46:21.593 に答える
0

C ++ ABIの複雑さ(名前マングリングなど)のため、ctypesを使用してPythonから直接C++ライブラリをロードすることは一般に困難でプラットフォーム固有です。

ctypesで簡単にラップできる単純なCAPIを作成するか、SWIGを使用してラッパータイプとPython用の適切な拡張モジュールを生成することをお勧めします。

于 2013-01-12T02:45:42.013 に答える