問題タブ [boost-python]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - std::vector の公開boost.python で
std::vector を生成する C++ コードをいくつか書きました。
また、いくつかのデータを操作する python スクリプトもあります。今のところ、このように宣言しています (以下)。
スクリプトを正常に実行できます。私のC++コードから:
C++ データを Python に渡す方法がわかりません。いろいろ調べましたが、決定的なものはないようです。
私は私のC ++に持っています
これは機能しているようですが、私が理解しているように、Pythonスクリプト用のクラス「PyVec」のみを提供し、必要なデータは提供しません。私が間違っている?
また、他の人が Python メーリング リストで boost::shared_ptr を使用しているのを見てきました。
この例も見つけましたが、紛らわしいことがわかりました。
いくつかのアプローチを考えることができます
boost::python::exec_file
メソッドに何かを渡す- を使用して
boost_indexing_suite_ext
- ウイング
boost::shared_ptr
どのアプローチが最も簡単に実行できますか? 私には明確なアプローチはないようです。
ここに私が見たいくつかのリンクがあります: boostウェブサイト から pythonウェブサイトから 別のメーリングリストスレッド
アップデート:
int
これは、以下のような私のpythonコードに渡すために機能します
しかし、ベクトルを渡したいのですが、上記と同様の方法でそれを行おうとすると、このエラーが発生します
TypeError: C++ 型の to_python (値渡し) コンバーターが見つかりません: std::vector >
したがって、明らかに、std::vector の処理方法を Python に伝える必要があります。このコードはそれを助けることができると思います。
しかし、std::vector は非常に一般的であるため、これを行うための定義済みの方法が必要です...そうですか?
python - CPython、IronPython、Jython スクリプトは相互に互換性がありますか?
Python スクリプトは 3 つすべてで機能すると確信していますが、確認したいと思います。CPython、Jython、IronPython を記述できるエディターについてあちこちで読んだことがありますが、その違いを詳しく調べたいと思っています。
私の状況では、テストしたい 3 つの異なる API があります。各 API はコード的には同じ機能を実行しますが、実装は異なります。各言語の API のラッパーを作成しています。各ラッパーは、Boost::python、Jython、および IronPython を使用して、まったく同じ機能と実装を python に公開する必要があります。
私の質問は、これらの公開されたメソッド (各言語に共通) を使用して記述された Python スクリプトは、Python の 3 つの「フレーバー」すべてで機能するでしょうか?
私が言ったように、答えは「もちろん」であると確信していますが、これに時間を費やす前に確認する必要があります.
c++ - 通常のmakefileを使用してブースト依存プロジェクトを構築するにはどうすればよいですか?
私はc++プロジェクトに取り組んでいますが、最近、ブーストのごく一部をプロジェクトに含める必要がありました。ブースト部分は本当に最小限です(Boost :: Python)。したがって、bjamを使用してすべてを構築するのはやり過ぎのように見えます(さらに、プロジェクトに取り組んでいるすべての人がmakeに慣れており、ジャムの知識がありません)。
私はすでにかなりのテストを行いましたが、以前に言及したライブラリをmakefileに含めて、ビルドを成功させる方法を見つけることができません。
あなたのすべての助けは深く感謝されます。:)
c++ - Visual Studio 2008 を使用してブースト Python の例を作成する
Boost Python ライブラリを使用して、C++ コードに Python 拡張機能を作成しています。以下に示す C++ コードから 'greet' 関数を python から呼び出せるようにしたいと思います。
そしてpythonコード:
私は bjam を使用してこれを行うことができました (hello_ext.pyd が生成され、うまく動作します) が、今度は Visual Studio 2008 を使用してビルドしたいと思います。hello.dll がビルドされます (ただし、hello_ext.dll も.pyd)。私のpythonコードを呼び出した後、エラーが発生しました:
ImportError: hello_ext という名前のモジュールがありません。
hello.dll の名前を hello.pyd または hello_ext.pyd に変更した後、別の ImportError: Dll load failed が発生しました
VS 2008 を使用して正しい .pyd ファイルを作成するにはどうすればよいですか?
boost-python - Boost.python が libboost_python.so.1.41.0 で失敗しました: 共有オブジェクト ファイルを開けません
Boost.Python は既にインストールしています。インストール中にエラーはありませんでしたが、問題があります。プロジェクトをビルドしようとするとエラーは発生しませんが、ラップされたプロジェクトを実行するとエラーが発生します:
プロジェクトをlibboost_python.so.1.41.0にコピーしようとしましたが、libをプロジェクトなどにコピーしようとしましたが、毎回smeエラーが発生します。
c++ - ラップされた関数の前後にいくつかのコードを実行する関数とメンバー関数のラッパーを作成するにはどうすればよいですか?
ラップされた関数の前後にコードを実行できるラッパークラスまたは関数を作成しようとしています。
理想的には、ラッパーは汎用であり、関数とメンバー関数に対して同様に機能し、任意の署名を使用する必要があります。
より詳しい情報:
私は、次のような薄いラッパーを手動で作成することなく、高価なC++呼び出しの周りでGILをリリース/再取得する簡単な方法を探しています。
この種のラッパーは、すべての種類の関数に対して数回繰り返されます。すべての関数をコーディングしないようにするソリューションを見つけたいと思います。
私はいくつかのアプローチを試しましたが、私が得ることができる最善の方法は、ユーザーが次のような戻り値とパラメーターのタイプを明示的に述べることを要求しました。
しかし、関数(&foo_wrapper)へのポインターを渡して、コンパイラーに型を認識させることは可能であると私には思えます。
誰かが私が使用できるテクニックを知っているか、正しい方向に私を向けることができますか?
乾杯!
c++ - 関数をブーストするPythonメソッド
boost::function を引数として取る boost python を使用して Python にエクスポートされたメソッドがあります。
私が読んだことから、boost::python は大騒ぎせずに boost::function をサポートする必要がありますが、python メソッドで関数を呼び出そうとすると、このエラーが発生します
このコードでPythonから呼び出しています
C++ では次のように定義されます。
ここでの目標は、次のようなことができるタイマー クラスです。
funcWithArgs を実行するタイマーを作成します。ブーストバインドのおかげで、これはほとんどすべての関数またはメソッドで機能します。
では、boost::python が自分の python 関数を boost::function として受け入れるために使用する必要がある構文は何ですか?
linux - Boost::Python: python-extension のビルド時にカスタム引数を gcc に渡す
-Wl,-rpath,\$$ORIGIN/lib/
g++ のリンカー ( reason )に渡す必要があります。この引数を Jamroot ファイルに渡す方法はありますか?
c++ - boost ::python(pyopencv)を使用してPython内でC++演算子を使用する方法
pyopencvバインディングを使用しています。このpythonlibは、boost::pythonを使用してOopenCVに接続します。今、私はSURFクラスを使おうとしていますが、Pythonコードでクラス演算子を処理する方法がわかりません。
C++クラスは次のように定義されます。
どうすればそのクラスに引数を渡すことができますか?
更新: interjayのおかげで、メソッドを呼び出すことができますが、タイプエラーが発生します。python boost :: python :: tupleは何でしょうか?
私にそれを与えます:
c++ - boost::python カスタム例外のエクスポート
現在、Boost.Python を使用して Python 用の C++ 拡張機能を作成しています。この拡張機能の関数は、エラーに関する情報を含む例外を生成する場合があります (何が起こったかを説明する人間が読める文字列だけではありません)。この例外を Python にエクスポートして、例外をキャッチし、追加情報で何かを実行できることを望んでいました。
例えば:
残念ながら、Boost.Python はすべての C++ 例外 (のサブクラスstd::exception
) を に変換するようRuntimeError
です。Boost.Python を使用すると、カスタムの例外変換を実装できますPyErr_SetObject
が、PyObject*
(例外の型の場合) とPyObject*
(例外の値の場合) を使用する必要があります。どちらも、Boost から取得する方法がわかりません。 Python クラス。おそらく、私がまだ見つけていない方法 (それは素晴らしいことです) があります。それ以外の場合、PythonでキャッチできるようにカスタムC ++例外をエクスポートする方法を知っている人はいますか?