問題タブ [python-embedding]
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.
python - マルチスレッドCアプリケーションへのPythonの埋め込み
私はマルチスレッドCアプリケーションにPythonインタープリターを埋め込んでいますが、スレッドセーフを確保するためにどのAPIを使用すべきかについて少し混乱しています。
私が収集したものから、Pythonを埋め込む場合、他のPython C API呼び出しを呼び出す前に、GILロックを処理するのは埋め込み者次第です。これは、次の関数で実行されます。
しかし、これだけでは十分ではないようです。Python APIの相互排除を提供していないように見えるため、ランダムにクラッシュすることがあります。
さらにいくつかのドキュメントを読んだ後、私も追加しました:
呼び出しの直後Py_IsInitialized()
ですが、それが混乱を招く部分です。ドキュメントには、この関数は次のように記載されています。
グローバルインタプリタロックを初期化して取得する
これは、この関数が戻ったときに、GILがロックされているはずであり、何らかの方法でロックを解除する必要があることを示しています。しかし実際には、これは必須ではないようです。この行を配置すると、マルチスレッドが完全に機能し、PyGILState_Ensure/Release
関数によって相互排除が維持されました。に続く呼び出しでアプリがデッドロックした後、すぐに
追加しようとしたとき。PyEval_ReleaseLock()
PyEval_ReleaseLock()
PyImport_ExecCodeModule()
だから私はここで何が欠けていますか?
python - (Python C API) PyRun_StringFlags に組み込み関数がありませんか?
ペット プロジェクトに Python を埋め込もうとしています。問題を次のコードに減らしました。
(参照をクリーンアップしていないことはわかっています。これは例です。)
それはによってコンパイルすることができます
実行すると、次のエラーが表示されます。
組み込み関数がロードされていないようです。私も何もできませんimport
。私はそれ__import__
が欠けていると思います。不足しているモジュールまたは不足しているものをロードするにはどうすればよいですか?
ありがとう。
c++ - OpenCV - C++ に埋め込まれた Python コードを実行すると、正しくない SURF 記述子が取得される
Kinect からの深度情報を利用するイメージ マッチャーに取り組んでいます。OpenCV を使用して Python で標準的な画像マッチングを行うコードを既にかなり多く書いていますが、Kinect を利用するために OpenFrameworks(C++) を使用しています。Python コードを書き直す代わりに、スクリプトを C++ コードに埋め込んで実行しています。
一連の画像から SURF 特徴を抽出し、何らかの処理 (クラスタリングなど) を行うスクリプトがあります。Python2.7 を使用してコマンド ラインからこのスクリプトを実行すると、正常に動作します。ただし、C++ アプリで (埋め込んで) 実行すると、すべての SURF 機能が 90 度の向きになります。
[結果は次のようになります] http://i.stack.imgur.com/0fGf8.png
[C++で実行した結果] http://i.stack.imgur.com/ECPev.png
私が含めた Python.h が別のバージョンの Python のものである可能性があると思いましたが、間違いなく正しいバージョンを使用しています。
この問題を修正/調査するにはどうすればよいですか?
c++ - C++ から実行される埋め込み Python スクリプトにコマンドライン引数を文字列として渡す方法は?
ユーザーの組み込み Python スクリプトを実行するための Python インターフェイスを公開する C++ プログラムがあります。
ユーザーは、実行する Python スクリプトのパスとコマンドライン引数を挿入します。次に、スクリプトが実行されます
コマンドライン引数を Python スクリプトに渡すには、Python C-API 関数を使用して設定する必要があります
電話する前にexec_file()
。
ただし、これには、コマンドライン引数を含むユーザーの文字列をトークン化して引数のリストを取得し、それらを を介して Python インタープリターに戻す必要がありますPySys_SetArgv
。これは単なる時間の無駄ではありません。この方法では、カスタム ユーザーのスクリプトでのみ定義される背後のロジックを知らずに、メインの C++ プログラムがコマンド ライン文字列をトークン化する責任を負わなければならないからです。
はるかに優れたクリーンなアプローチは、メタコードで次のようになります。
Boost と Python C-API のドキュメントを何時間も調べましたが、役に立つものは何も見つかりませんでした。これを実現する方法があるかどうか、つまり、コマンド ライン引数の文字列全体を C++ から埋め込み Python スクリプトに渡す方法があるかどうか知っていますか?
アップデート:
以下のコメントでスティーブが提案したように、 https://stackoverflow.com/a/8965249/320369に従って、入力文字列のトークン化の問題を解決しました。
私の場合、私は使用しました:
次のように、文字列を含むタプルも解析できるようにしたかったからです。
そして、あなたが使用する場合:
元の投稿と同様に、引用符で囲まれた文字列が正しくトークン化されていません。
c - CにPythonを埋め込むときに、このエラー(「ImportError:No module name site」)が発生する原因は何ですか?
CアプリケーションにPythonを埋め込む方法を学ぶために、この簡単なチュートリアルの最初の例を実行しようとしましたが、Windowsですべてを説明しており、Ubuntu Linuxで作業しています。
最初の試行で、セグメンテーション違反が発生し、このエラーを克服するために Py_Initialize() の前に 2 行追加しました。
今、私は Py_Initialize() をしたいときにこのエラーを受け取ります: "ImportError: サイトという名前のモジュールはありません".
このような解決策を見つけましたが、うまくいきませんか? これを修正するにはどうすればよいですか? 私もPythonの初心者です。
python - Visual C ++コードからのPythonの実行(埋め込みPython)
このVisualC++コードとPythonが埋め込まれていますが、以下のコードを使用して外部Pythonコードを実行しようとすると、デバッグモードでエラーが発生します。
PyRun_File関数がc++コードを介して呼び出されると、エラーが発生します。
C++関数は次のとおりです。
これが私がC++コードから実行しようとしている外部Pythonスクリプトです:
PyRun_File関数でエラーが発生するのはなぜですか?
PythonをC++コードに埋め込むことについてはよくわからないので、ここにいくつかのポインタをいただければ幸いです。私はPythonに比較的慣れていないことを覚えておいてください。私のプログラミング経験のほとんどはVisualC++です。この状況で2つを組み合わせるための最良の方法は何でしょうか?
python - PyFrameObjectをPyObjectに変換する方法
何かが足りないかもしれませんが、ここに問題があります。
C拡張機能でPythonコードをトレースしていて、トレース関数がPyFrameObject*フレームを取得しました。ここで、Pythonコード(CythonによってCに埋め込まれるか変換される)でフレームを処理したいのですが、PyObject*を処理します。
PyFrameObject*をPyObject*に変換するにはどうすればよいですか?frameobject.hに適切な変換機能が見つかりません。
ありがとう。
c++ - メモリリークの可能性
誰かがメモリリークがあるかどうかを確認できますか? 私は混乱しています。
python - Python.hを使用する場合、「AttributeError:'module'オブジェクトには属性'argv'がありません」
Python.hをいじると、次のエラーが発生しました。
C ++コード:
Pythonでは次のとおりです。
私は何が欠けていますか?
c++ - C++とboost::python
boost:pythonのみを使用してPythonをアプリに埋め込むことはできますか?アプリに追加のライブラリが必要ですか?
または、Unicode文字をネイティブにサポートし、アプリで使用するためのライブラリを必要としない埋め込み可能な言語はありますか?