問題タブ [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.

0 投票する
0 に答える
585 参照

python - Python + C 拡張機能が埋め込まれたアプリケーションで msvcr90.dll の重複を回避しますか?

Python 2.7 を組み込んだ Windows アプリケーションを配布しています (手法: python27.dll + 'Python27' ディレクトリと DLL および Lib フォルダーを .exe と共にインクルードします)。また、C 拡張機能 (基本的に DLL である .pyd ファイル) を使用するカスタム Python パッケージも含めています。

msvcr90.dll のバージョン 9.0.21022.8 と関連するマニフェストが必要であることは承知しています。msvcr90.dll + マニフェストを .exe ファイルと一緒に置くことができ、問題なく動作しています。しかし、カスタム Python パッケージを使用するには、msvcr90.dll + マニフェストをパッケージの .pyd ファイルと同じレベルに含める必要があることがわかりました (存在しない場合、PyImport_ImportModule 中にアプリケーションがクラッシュします)。.pyds がツリーのさらに上にある msvcr90.dll を「見る」ことができない理由がわかりません。

宛先マシンで MS Visual C 再頒布可能パッケージを実行することで (おそらく) これを回避できることを認識しています...これにより、基本的に MSVCR DLL + マニフェストがインストールされるため、システム全体で使用できるようになります。しかし、ユーザーにそれを実行するように要求したくはありません。また、正しい場所にインストールしてバージョン管理などを自分で処理しようとして台無しにしたくもありません。

0 投票する
1 に答える
1042 参照

python - CアプリケーションからPythonスクリプトをインポートするときに、sys.pathにos.getcwd()を明示的に追加する必要があるのはなぜですか?

C / C ++を使用したPythonの拡張に関するPythonのドキュメントを調べていたところ、非常に興味深いシナリオが見つかりました。test_script.py作業ディレクトリに次のような簡単なPythonスクリプトがあると考えてください。

同じディレクトリに、というファイルがあります。このファイルanother_test_script.pyには次のものがあります。

と呼ばれると、これは正常に機能しpython ./another_test_script.pyます。今、私は次のようにPythonライブラリにリンクされたC環境から上記の関数を呼び出そうとしています。

上記のCプログラムのコメントに記載されているように、を含む行をコメントアウトするPyRun_SimpleString("sys.path.insert(0, os.getcwd())")と、呼び出しはPyImport_Import失敗します(returning NULL)。さらに、呼び出しPyRun_SimpleString("import test_script")は同じように動作するように見えます。

sys.path同じ作業ディレクトリ内の別のPythonスクリプトからインポートするだけなのに、現在の作業ディレクトリをPythonの文字列リストに手動で追加する必要があるのはなぜですか?さらに、Pythonが最初に現在の作業ディレクトリを検索しないのはなぜですか(os.getcwd()正しいパスを返すため)?Cアプリケーションにバンドルされているスクリプトから関数をインポートしたい場合、これは適切な解決策ですか?

0 投票する
1 に答える
976 参照

python - Python 3 の埋め込み - ビルトインなし?

多くの脱毛の後、私は助けを探しています.

Python 3.3 を単純なアプリに埋め込んでいます。異常な点の 1 つは、Python がパス上にないことですが、すべて正常にロードされているようです。しかし、何らかの理由で何も実行できません。

以下は、エラーを示す小さなサンプル プログラムです。

編集:参照カウントがひどいことは知っています-これは単なる例です。

以下に示すさまざまな試みを含め、ビルトインをインポートおよび定義するさまざまな方法を試しました。

それらのどれも機能しません-エラーはそれぞれと同じです。

私は何を間違っていますか?パス関連ですか?私が間違っているビルトインについて何か?

0 投票する
3 に答える
10144 参照

python - PyImport_Import が現在のディレクトリからモジュールをロードできないのはなぜですか?

埋め込みの例を実行しようとしていますが、明示的に追加しない限り、現在の作業ディレクトリからモジュールをロードできませんsys.path

Python は現在のディレクトリでモジュールを探すべきではありませんか?

Edit1 :モジュールをインポートしてみました:

それでも、次のエラーで失敗します。

Edit2sys.path ドキュメントから:

スクリプト ディレクトリが利用できない場合 (たとえば、インタプリタが対話的に呼び出された場合、またはスクリプトが標準入力から読み取られた場合)、path[0]は空の文字列であり、Python に現在のディレクトリ内のモジュールを最初に検索するように指示します

not availableの意味がわかりませんが、印刷sys.path[0]すると空ではありません。

0 投票する
2 に答える
1042 参照

c++ - C++ の Python コード

C++ フレームワークでいくつかの Python コードを使用して、いくつかの統計をプロットしたいと考えています。次の投稿 (C++ に python を埋め込む方法について) を既に見つけましたが、指示に従っても成功しませんでした: Embed python code in C++ (Windows + minGW + Python 2.7.2 + Eclipse)

申し訳ありませんが、make ファイルや静的または動的ライブラリのアタッチの経験があまりありません....

次のシステムを使用する必要があります: Windows 7 + 64 ビット + Eclipse IDE for C/C++ Developers、バージョン: Juno Service Release 1 + mingw + python32

パスとシンボルの下: + python32 のインクルード ディレクトリを追加 + libpython32.a に対応するライブラリ「python32」を追加 + ライブラリ パスを追加

コンパイルとリンクは機能しているようですが、exe を起動しようとすると、次のメッセージが表示されます。

「コンピュータに python32.dll が見つからないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてください。」

ソースに静的ライブラリ (libpython32.a) を追加しようとしているため、このメッセージを理解できません。正しい方向に向けて優しく押してくれませんか?

ご助力ありがとうございます!

編集: makefile と objects.mk を追加

MAKEFILE ################################################## ############################## # 自動生成ファイル。編集しないでください!#################################################### ###############################

OBJECTS.MK

0 投票する
0 に答える
427 参照

c++ - Tkinter によって作成された C++ DialogBoxes に埋め込まれた Python

mfc を実行し、Visual Studio 2010 でコンパイルされた C++ アプリケーションに Python を埋め込むことに成功しました。

私が埋め込んだ Python のバージョンは次のとおりです: 2.7.3 (デフォルト、2012 年 4 月 10 日 23:31:26) [MSC v.1500 32 ビット (Intel)]

ロードしたスクリプトでメイン プログラムの選択した関数を呼び出せるメソッドもいくつかあります。

Tkinter を使用して Python スクリプトを使用してダイアログ ボックスを作成しようとすると、問題が発生します。これらのダイアログ ボックスが表示されている間に、Tkinter と Python インタープリターを再度初期化しようとすると、プログラムがクラッシュします。この問題に関する多くの情報を見つけることができませんでした:

http://mail.python.org/pipermail/python-list/2001-July/114106.html

および潜在的な解決策: http://www.python.org/workshops/1995-12/papers/ahlstrom1.html

私は mfc と python を使用したプログラミングが初めてなので、正しい方向へのポインターは大歓迎です。

ありがとうございました

0 投票する
0 に答える
192 参照

python - PythonスクリプトをCに埋め込む最も簡単で最速の方法は?

Python スクリプトを C に埋め込むための Python/C API を調べています。Python/C API にあまり関与せずに、Python スクリプトを埋め込む簡単な (またはより単純な) 方法があるかどうかを知りたいです。私のpythonスクリプトでは、pythonスクリプトで他の多くのモジュール(正確にはNumPy、SciPy、Matplotlib、およびMayavi)を使用していることに言及する必要があります(これが問題になるかどうかわからないため)。あなたが与えることができるかもしれないどんな助けやアドバイスも大歓迎です.

0 投票する
0 に答える
466 参照

visual-studio - Visual C++ への Python の埋め込みとランタイム エラー R6034

そのため、この 1 週間ほどの間、Python スクリプトを C に埋め込む実験を行ってきました。これを一連の段階で行いました。私の最初の試みの 1 つで、C から Python スクリプトを呼び出し、Python スクリプト内で 2D カラーマップが生成されました。この部分はかなりうまく機能します。私の次のステップは、Python スクリプトに 3D ビジュアル (より 3D サーフェス) を実装することでした。mayavi2 を使用してこれを実現しました。埋め込みなしで (つまり、IDLE を使用して) Python スクリプトを実行すると、2D と 3D の両方のビジュアルが生成され、正常に動作します。ただし、スクリプトを CI に埋め込もうとすると、ランタイム エラー R6034 が発生します。私は python2.7 を使用しており (python(x,y) をダウンロードしました)、Visual Studio 2012
を使用していることを明記する必要があります。誰かがこの問題に遭遇し、この問題を解決する方法を知っているかどうか疑問に思っていました。

0 投票する
1 に答える
2838 参照

python - BoostPythonデバッグの構築

私は間違いなくbjam専門家ではないので、それが本当に愚かなことであるならば、私の無知を許してください。

このチュートリアルを使用してdebugバージョンを作成しようとしています。boost::python

Python 3.3.0フォルダを作成しましC:\Development\Python-3.3.0た。ビルドは有効であり、、、.libおよび.dllすべて.exePCBuildフォルダーに存在します。インタプリタをテストしましたが、正しく動作します。

次のコマンドラインを使用しています。

私の問題はから来ていuser-config.jamます。以下を使用して、チュートリアルの仕様に従ってみました。

しかし、リンクは失敗します...何らかの理由で、3.3を使用したいのではないようです。出力ログの一部を次に示します。

に変更を加えてみましたuser-config.jam。最初、私は逃げませんでした\、そして驚くべきことに、それは私が3.3を構築したかったことを検出していましたが、それ/LIBPATHは間違っていました(バックスラッシュなし):

ご覧のとおりpython33_d.lib、これは望ましいものですが、を/LIBPATH含んでいません\/また、リンクの試行に戻るものに置き換えてみましたpython26_d.lib

役に立つ場合は、以前にインストールしたバージョンのPythonをアンインストールしました。

jamファイルにバージョン3.3を適切に要求させ、正しいパスを提供するにはどうすればよいですか?

編集:もう少し遊んで、前に「スペース」を削除しました;...それを行うだけで正しいバージョン3.3が検索されますが、相対フォルダからリリースバージョンをリンクしようとしていlibsます...最悪の場合はlibsをからPCBuildにコピーしてもかまいませんlibs

面白い部分は、それが私が達成しようとしていることに最も近いということですが、それは出力します

パーサーはjamかなり弱いようです...ヒントやヒントが役立つでしょう

編集2:問題を単純化しようとして、私は自分を変更してuser-config.jam、次のものだけを含めました。

そして、次のコマンドラインを使用します。

予想通り、それは見つけることができません.lib

そこで、作成したすべてのライブラリにアクセスできるように、PCBuildフォルダのクローンを作成することにしました...しかし、その後、またはコマンドラインを変更せずに... Python 2.6を探していますか?!?libs.jam

掘り下げるほど、私は混乱します...また、一方はaで失敗しLNK1104、もう一方はLNK1181...で失敗します。

0 投票する
1 に答える
1293 参照

c++ - def foo() で PyRun_SimpleString が失敗する:

名前/パスに unicode (widechar) を含むファイルに対して PyRun_SimpleFile を動作させることができませんでした (FILE* 互換性の問題)。

そこで、自分で Python スクリプトを開き、PyRun_SimpleString を使用して各行を実行することにしました。

ここに示されている疑似コード。

上記では、以下の def ステートメントでエラーが発生します (<-- 以下に表示)

Python のバージョンは 2.7 です

これを使用して、if/it が失敗したスクリプトの行番号を表示したいと思います。他の多くの人が PyRun_SimpleString で成功しているようです!

前もって感謝します。