問題タブ [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 - 初期化時のPythonエラーの埋め込み
C コードを実行して Python 関数を呼び出すと、Py_Initialize() でエラーが発生します。エラーは ImportError: No module named site です。Py_SetProgramName(argv[0]) を入れようとしましたが、うまくいきません。cmd 呼び出しは cInterfacePython Test.py 乗算 3 2 (exe は cInterfacePython) です。
python-3.x - ESX 4.0 の SFCB、Python バインディング レイヤー、および Python プロバイダーに関する問題
Python で SFCB プロバイダーを作成しています。SFCB は C++ プロバイダーとのみ通信するため、必要に応じて SFCB と通信してプロバイダーを開始できる中間層 (cmpi-bindings、python 拡張モジュール) が必要です。
同じ cmpi レイヤーは、ESX 4.1 で実行すると完全に正常に動作します (つまり、SFCB 呼び出しを読み取ってから Python プロバイダーを実行します) が、ESX 4.0 では Python モジュールのインポートに失敗します。
いくつかのデバッグの後、日時モジュールのインポートが未解決のシンボル (PyExc_IOError) エラーで失敗していることがわかりました。-XLinker --exportdynamic を使用してこれらのモジュールをビルドしようとしたため、アプリケーションに埋め込まれた Python インタープリターがネイティブ モジュールのロードに失敗する で提案されている未解決のシンボルを探しましたが、無駄でした。
次に試すことができるオプションは何ですか。(同じコードベースが 4.1 では機能しますが、4.0 では機能しないため)。どんなポインタも役に立ちます
python - Python 3 インタープリターは、埋め込まれたときにメモリ リークを起こしますか?
このバグ レポートでは、2007 年 6 月の時点で、Python インタープリターは、Python インタープリターが埋め込まれた C/C++ アプリケーションで Py_Finalize を呼び出した後、割り当てられたすべてのメモリをクリーンアップしないと述べています。アプリケーションの終了時に一度 Py_Finalize を呼び出すことが推奨されていました。
このバグ レポートは、バージョン 3.3 および 2011 年 3 月の時点で、インタープリターがまだメモリ リークを起こしていると述べています。
この問題の現在の状態を知っている人はいますか? 実行中のインスタンスごとにインタープリターが複数回呼び出されるアプリケーションがあり、メモリ リークが発生しているため、心配しています。
私は既に参照カウントを処理するために boost::python を使用しており、実行の間に Python プログラムを実行することによって作成されたすべての参照のグローバル ディクショナリをクリアします。私はいくつかのシングルトン クラスを持っています - これらは問題でしょうか?
これは扱いやすい問題ですか、それとも Python インタープリターのバグですか?
iphone - iPhoneの線形代数(python / numpy?)
今学期は、iPhoneアプリとして圧縮センシングアルゴリズムを実装しています。これを行うには、いくつかの優れた行列/線形代数ライブラリが必要です。私はiOSとPythonの両方に少し慣れていないので、オプションを評価するのに役立つ情報を探しています。
iPhoneにvecLib、BLAS、LAPACKを含むAccelerateフレームワークがあることは知っていますが、私はそれらのAPIに精通していません(そしてそれらはかなり混乱しているようです)。
私はPython/numpyをいじってみましたが、使い方がいかに簡単かが本当に気に入っています。選択肢があれば、Accelerateよりもnumpyを使用したいと思います。
Pythonを埋め込むことは可能ですが、私自身はほとんど運がありませんでした。EnthoughtのEPD.frameworkをXCodeプロジェクトに含めようとしましたが、1時間ほど遊んだ後、機能しませんでした。numpyのコンパイルはもっと悪くなると思います。
別の方法として、Cython(http://cython.org/)を使用してCファイルを生成し、そこから関数を呼び出すことはできますか?私もこれを試みましたが、.soライブラリを含めて呼び出すことでさらに多くの問題が発生しました。Cythonに.cおよび.hファイルを生成させる方法はありますか?.cファイルと.hファイルはまだnumpyに依存していると思いますか?
PyInstallerとfreeze.pyについていくつか読んだことがあります。それらのどちらかがここで私を助けてくれますか?
AccelerateまたはPython+numpy以外にオプションはありますか?Python + numpyは良いオプションですか、それともコンパイル/ビルドが難しいですか?Cythonは有効なソリューションですか?
ありがとうございました!
qt-creator - Boost-Python: ファイルからスクリプトを実行するとクラッシュする
コンソール アプリケーションが boost::python::exec_file() を実行しようとすると、1 秒間ハングしてからクラッシュします。
boost::python::exec を問題なく実行できます。
バインディングをブーストしてPython APIから直接実行しないようにしましたが、同じことが起こり、少しハングしてからクラッシュします。
これはboost.pythonがリンクしているものなので、python apiの問題だと思いますか?
Boost.Python の共有ビルドを使用しており、事前にコンパイルされたバージョンの Python 3.2.2 32 ビット ライブラリ (libpython32.a) にリンクしており、Windows 7 で QtCreator を介して MinGW 4.6 でコンパイルしています。
これは私のmain.cppです:
これは、実行しようとしているスクリプト ファイル (test.py) です。
私の .pro ファイルは次のようになります。
これはすべて正常に動作するようで、コンパイル エラーやリンク エラーは発生しませんが、いくつかの警告が表示されます。
編集 今、これはクラッシュを説明したり解決したりしませんが、独自の読み取り関数を使用して、出力をboost::python::execに渡すだけで回避できます。次に、exec_file または PyRun_SimpleFile を使用する必要はありません
python - 組み込みの Python インタープリターで変数を出力する
Python を組み込んだ小さな C プログラムを作成しました。Py_Initialize() と Py_Finalize() を使用して正しく設定しており、PyRun_SimpleString または PyRun_SimpleFile を使用してスクリプトを実行できます。ただし、変数を出力するときに Python 独自のインタープリターの動作をどのように模倣するかはわかりません。
具体的には:
私にとってはうまくいきます:(1、2、3)が出力されます
でも:
何も出力しません。Python 独自のインタープリターでは、これは (1, 2, 3) も出力します。ユーザーが期待するようにコードを実行し、値を出力するにはどうすればよいですか?
前もって感謝します!
c++ - EmbeddedPython2.7.2ユーザー定義ディレクトリからのモジュールのインポート
定義されたAPIを持つC/C++アプリケーションにPythonを埋め込んでいます。
アプリケーションは、スクリプトで定義されたクラスをインスタンス化する必要があります。クラスは、おおまかに次のように構成されています。
私は過去に(概念実証のために)次のタイプのコードを使用してこれを実行することに成功しました。
私はより本番環境にいるので、これはPyImport_Import行で失敗しています-これは、スクリプト名の前にディレクトリを追加しようとしているためである可能性があります。
ここで、私が試したことを理解するために、これらすべての呼び出しの前にシステムパスを変更して、このモジュールを検索するようにしました。基本的に、sys.pathをプログラムで変更してみました。
これらの行は正常に実行されますが、コードを機能させることには影響しません。明らかに、私の実際のコードには、除外したエラーチェックが大量に含まれているので、心配しないでください。
だから私の質問:クラスをインスタンス化できるように、埋め込まれたインタプリタをスクリプトに適切に向けるにはどうすればよいですか?
python - この「from-import」がPyRun_SimpleStringで失敗するのはなぜですか?
私は単純な(?)埋め込みPythonプロジェクトに取り組んでいます。'setup.py install'を使用してsite-packagesにインストールされたカスタムパッケージがあります。例:
C:\ Python27 \ Lib \ site-packages \内:
いくつかの単純な埋め込み呼び出しを実行するだけで、Pythonを実行しているcmdウィンドウで取得したものと一致しない動作が発生します。具体的には:
...これらはすべてcmdウィンドウで正常に機能します(ImportErrorはありません。たとえば、期待される結果を得ることができます。dir(mymodule)
結果として得られるインタープリターPy_Initialize()
は、cmdウィンドウで取得するものとは少し異なることを認識しています。特に、sys.path ...他の回答をいくつか読んだので、sysの最初の要素として''を挿入してみました。 .path:
PyRun_SimpleString("import sys\nsys.path.insert(0,'')")
インポートが失敗する前ですが、運がない場合でも-1を返します。また、sys.pathに「C:\ Python27 \ Lib \ site-packages \ mypackage」を追加しようとしましたが、「mymodule」(mymodule.py)をインポートできませんでした。
SOや他のサイトの他の例に基づいて、インポート時にいくつかのバリエーションを試しました。
またPyImport_ImportModuleEx
、PyRun_SimpleStringと同様に、「frommypackageimportmymodule」以外のすべてで機能しました。
さらに、このシナリオはMacOS /Python2.7で問題なく機能します。失敗しているのはWindowsのすぐ下です。
これが軌道に乗らない可能性があるアイデアはありますか?
更新:いくつかの追加情報:'subpackage.py'は拡張ライブラリをインポートします('utilites.pyd'と呼びましょう)。これをインポートしない他の「.py」モジュールをインポートすることができます。
python - Python / C-Api: モジュールにクラスを追加
現在、Python インタープリターをアプリケーションに埋め込もうとしています。私のアプリケーションはロギングに Poco API を使用しているため、Python のロギング モジュールからもアクセスできるようにしたいと考えています。これを行う最も簡単な方法は、拡張モジュールとして関数の静的セットを提供してメッセージをログに記録し、これらの関数を呼び出す Handler サブクラスを作成することです。
Py_InitModule()
ユーザーに追加の python モジュールをインストールしてほしくないので、組み込みの python インタープリターの外部で自分のコードを再利用する必要がないので、静的関数を提供してからハードコードされた Handler を追加できれば素晴らしいでしょう。作成されたモジュールのサブクラス (ハードコーディングされた手段: 実行時に追加されますが、実際には初期化時に常に解釈される const 文字列)。
私の問題は、通常の python クラス定義を解釈する方法がわからないことです。
特定のモジュールに追加され、次のようにアクセスできるようにしますmymodule.Test
ソリューションは、純粋な python ベースにすることも、python c-api を使用することもできます。
python - 「オーバーロード」はstderrでは機能しません
上記のコードはここから借用しています:Pythonでstderrをリダイレクトする方法は?Python C API経由ですか?
cpp exeから実行すると、「HELLO FRED!」というメッセージボックスが表示されます。その後に、キャリッジリターンと思われる空のメッセージボックスが続きます。これまでのところすべて良好ですが、例外が発生した場合、何も得られません。テキストファイルにも何も書き込まれません。
しかし...Pythonスクリプトから「importstdcallbk」のコメントを外し、コマンドラインから実行すると、次のようになります。
この:
したがって、cpp exeから実行された場合ではなく、機能します。
一体何がここで起こっているのか誰かが知っていますか?
乾杯