問題タブ [python-extensions]
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 - どのツール (gdb? xcode? pdb? など) を使用して、C 拡張された Python プログラムでメモリ リークを見つけることができますか?
C で記述された拡張モジュールを含む python プログラムを作成しています。拡張モジュールは、プログラムで継続的に使用される関数を定義します。
プログラムのどこかにメモリ リークがありますが、それを見つける方法がわかりません。私は試しました 1) Valgrind をインストールします。ただし、OSX Mavericks (10.9) を使用しており、Valgrind は OXS 10.7 (および 10.8 はやや不安定) しかサポートしていないため、これを機能させることはできません。2) gdb の使用。Pythonコードから呼び出されるc関数にブレークポイントを設定する必要があるため、gdbでPythonスクリプトを実行できないようです。そのためには python-debuginfo をインストールする必要があると思いますが、できませんでした。3) pdb の使用。しかし、pdb を使用して C コードをデバッグするにはどうすればよいかわかりませんでした。
プログラムのメモリ リークをデバッグするのに適したツールはありますか?
python - Mac OSX で python virtualenv に python.h を入れるにはどうすればよいですか?
Python アプリケーションの C 拡張機能を作成していて、Python 固有の C コードをテストする必要があります。そのためには、Python.h を C ファイルにインポートする必要がありますが、私の人生ではそれができませんでした。ほとんどのチュートリアルでは、sudo apt-get python-dev の行に沿って何かを提案していますが、私のシステムには apt-get がありません。たとえあったとしても、自分の virtualenv に dev ファイルがある方がよいと思います。
私のvirtualenvにPython.hを入れる方法はありますか?
python - tp_clear、tp_dealloc、および tp_free の違いは何ですか?
あいまい文字列検索用のカスタム python モジュールがあり、レーベンシュタイン距離計算を実装しています。これには、すべての計算を行う wlevtree C 型 (tree と呼ばれる) へのポインターと PyObject* を指す 2 つのメンバーを持つ levtree と呼ばれる python 型が含まれています。 wordlist と呼ばれる python-strings の python-list。必要なものは次のとおりです。
- levtree の新しいインスタンスを作成するとき、文字列のタプルを唯一の入力として受け取るコンストラクターを使用します (インスタンスがすべての検索を実行する辞書です)。このコンストラクターは、の新しいインスタンスを作成する必要があります。 wordlist を levtree の新しいインスタンスにコピーし、入力タプルの内容を wordlist の新しいインスタンスにコピーします。これが私の最初のコードスニペットと私の最初の質問です:
Py_IncRef(self->wordlist); を呼び出す必要がありますか? self->wordlist = PyList_New(numLines); の後 または、参照が PyList_new で既にインクリメントされているため、冗長ですか? 次に、 PyList_SetItem(self->wordlist, i, strObj); についても同じ疑問があります。そして Py_IncRef(strObj);..
- levtree のインスタンスを破棄するとき、tree が占有するスペースを解放する C 関数を呼び出し、wordlist を破棄し、wordlist に含まれるすべての文字列のすべての参照カウントをデクリメントします。ここに私の tp_dealloc があります:
ここですべての割り当て解除を機能させるのは正しいですか? 現時点では tp_clear と tp_free を持っていませんが、必要ですか? 現時点で私のコードは割り当てでは機能しますが、割り当て解除では機能しません。これは、同じ python 変数でinitを複数回呼び出すことができますが、すべての python スクリプトの最後に (これは正しく機能します)、「セグメンテーション フォールト」が発生するためです。割り当て解除プロセスで何かがうまくいかないと思います..
python - Python 2.7用のWindows 8で複数のpyxファイルを使用してcythonを構築する
ビルドには distutils を使用します:
シンプルなファイルのビルドpyx
(setup.py):
複数のファイル (setup.py) のビルド:
test2.pyx:
上記のビルドは正常に機能し、コンパイルとリンクの両方が正常に完了していることがわかりますが、メソッドsay_hello_to2
がバイナリにあるようには見えません。Python を起動し、以下を実行するとtest.pyx
、モジュール内に isのメソッドのみが含まれていることがわかります。
拡張ビルドに複数のpyx
-file を追加することは可能ですか?
python - C 拡張 API の Python コールバックからグローバル変数にアクセスする
私はPythonとC拡張が初めてです。私は 2 つのスレッドを作成し、コールバック関数 py_cb() を定義した Python コードを書いています。あるスレッドでは、特定の時間間隔の後にグローバル リストに追加していますが、別のスレッドでは、C 拡張ライブラリ API を呼び出しています。C 拡張 API は、元のファイルで定義された Python コールバック関数 (py_cb) を呼び出すスレッドを生成します。コールバック関数で、グローバルリストを表示しようとしているのですが、IDが違うようです。id(listName) を使用して確認しました。C 拡張 Python コールバック関数で正しいグローバル変数を使用する方法はありますか? グローバル値はすべてのスレッドで共有されると想定していましたが、そうではありませんか? また、より良い解決策を提案してください。
以下は C コードです。
以下は、simple.py ファイルの python コールバック API です。
python - Python C++ 拡張機能のビルド -- リンクされたライブラリが見つからないかどうかを知る方法
Python でラップされた C++ コードをダウンロードし、ソースからビルドしようとしましたが、エラーなしでコンパイルされましたが、最終結果を実行すると、少なくとも 1 つが見つからなかったことを示唆するように失敗しました。リンクするはずだったライブラリ。
驚いたことに、distutils.core.Extension
ではライブラリのリストを指定できますが、ライブラリの 1 つが存在しないことを知らせるエラーやメッセージは表示されません。意味不明な文字列をリストに入れることができ、それでもエラーなしで実行されます。にこれの設定はありますExtension
か?または他の確認方法はありますか?
参考までに、setup.py
コードは次のとおりです (Ubuntu 14.04、Python 2.7)。
前もって感謝します!!
python - VC2010で構築されたboost.python
ビジュアルC ++ 2010(ダイナミックライブラリ、64ビット)でboost.pythonを正常にビルドしました。Windows 7 64ビットにpython 2.7.8 64ビットがインストールされています。ここで、Python 拡張機能は、Python 自体のビルドに使用されたのと同じコンパイラでビルドする必要があることを読みました。私の質問は、python 2.7.8 が Visual C++ 2008 64 ビット コンパイラでビルドされたので、次の組み合わせを使用できますか?
- VC2008 64ビットで構築された私のpython拡張機能(python自体と一致するように)
- VC2010 64 ビットでビルドされた 64 ビット boost.python dll
- python 64 ビット、VC2008 64 ビットでビルド
私は、boost.python dll が python dll に依存していることに気付きました。そのため、ミックスについてかなり心配しています。