問題タブ [python-c-extension]

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 投票する
1 に答える
189 参照

python - パッケージ内の Python C 拡張機能 - 動作しませんか?

Python C 拡張機能のパッケージ化に取り組んでいますが、ここで問題が発生しています。

このsetup.pyで

問題なくビルドできますが、インストール後にモジュールをインポートできず、ImportError が発生します。

私はそれが些細なことだと確信しているので、何が欠けていますか?

前もって感謝します!

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

python - h5py を別の HDF5 モジュールと一緒に使用するとデッドロックが発生する

pthreads と HDF5 を使用する Python 用の C++ モジュールを作成しています。私のモジュールは H5F_ACC_EXCL モードで HDF5 ファイルを作成するため、ファイルが既に存在する場合は失敗します。この場合、HDF5 はスタック トレースを出力します。このモジュールの Python C インターフェイス関数は 1 つのスレッドで実行され、ファイルの作成は別のスレッドで行われます。通常はすべて正常に動作しますが、モジュールを使用してスクリプトに h5py をインポートすると、システムがデッドロック状態になります。ファイルを作成しようとするスレッドには、次のバックトレースがあります。

[行 #7 は、モジュール内の関数について通知します] PyTables をインポートしても、この問題は発生しないことがわかりました。この問題を解決するための助けをいただければ幸いです。

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

reference-counting - PyTuple_SetItem 使用時の明らかなメモリ リーク

C++ Python 拡張機能で入れ子になったタプルのセットを構築しています。ただし、参照カウントの管理に問題があります。

このメモリ リークを再現するための最小限のコード:

ここで、代わりに を に置き換えてもPyTuple_SetItem(outer, index, inner)Py_CLEAR(inner)メモリ使用量は時間の経過とともに増加しません。

外側のタプルが内側のタプルへの参照を盗んでいるのは間違っていますか? メモリが再利用されない他の理由はありますか?

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

python - Python C API:PyEval_EvalCodeの使用

CからPythonインタープリターを使用する方法を理解しようとしていますが、に問題がありPyEval_EvalCodeます。基本的には、Pythonコードの任意の文字列を取り込んでコンパイルし、実行して、結果を出力するC関数を作成しています。

None問題は、結果を出力すると、式が明らかにに評価されない場合でも、常にが得られることNoneです。

コードは次のとおりです(わかりやすくするために、エラーチェックと参照カウントは削除されています)。

この関数を入力として呼び出してみたところ"5 + 5"、が表示されNoneました。PyEval_EvalCode間違って使用していますか?

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

c++ - C++ コードの一部を Python にラップする

データを生成する C++ コードがあります。データを Python に公開したい。しかし、それは思ったほど簡単ではありません...

この C++ がバイナリにコンパイルされるとしcppcodeます。フレームワークのセットアップ方法が複雑なため、コードは次のようにしか実行できません。

cppcode 内では、Python からアクセスしたいデータが生成されます。どういうわけかプログラムを次のように書き直すことができるかどうかはわかっています

次に、Boost Python で CppClass をラップし、インスタンスを構築し、引数を指定して実行し、生成されたデータにアクセスします。

しかし、今ではコードを次のようにしか実行できません./cppcode {command line arguments}

./cppcode./cppcode が終了した後、そのメモリはシステムによって再収集され、Python からはもう見ることができないため、Python から呼び出すことはできません。それを回避する方法はありますか?

私は考えることができます:(1)./cppcodeにデータをディスクにダンプさせ、Pythonにそれを読み取らせます。(2) データを stdout にダンプし、python スクリプトにパイプします。しかし、どちらにしても、Python で文字列解析を行う必要があり、遅くなる可能性があります。それを回避する方法はありますか?

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

python - Cからの高レベルのPythonコンストラクトを使用する

threading.Condition、およびcollections.dequeCで記述されたモジュールからのような高レベルのPython構造を使用するためのベストプラクティスはありますか?特に:

  1. メソッドとメンバーのdictルックアップコストの回避
  2. 可能な場合は、Cにあるこれらの構成要素の一部に直接アクセスする
  3. 必要な機能をローカルで再実装し、標準ライブラリの他の場所からインポートしない場合
0 投票する
1 に答える
600 参照

python - Monkey による Python での C 拡張へのパッチ適用

質問 972で説明した方法を使用して、psycopg で cursor() メソッドをモンキー パッチできませんでした。

psycopg2 のメソッドにをパッチしようとしましたが、うまくいきませんでした:

C拡張だからですか?

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

python - C 拡張機能から PIL 画像データにアクセスする

C拡張からPIL画像のピクセルデータにアクセスする速度の点で最も効率的な方法は何ですか? それが違いを生む場合、私はそれへの読み取り専用アクセスのみが必要です。

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

python - Python C-API PyUnicode_FromString

私は Python C API を使用しています。Google で検索してやや不可解な回答 (問題を解決できない) を見つけましたが、このエラーを回避できないようです。

gcc -shared [...] 'pkg-config --cflags --libs python3' -fPIC [...] (そして、はい、pkg-config 行はバッククォートにあります)でプログラムをコンパイルすると、次のエラー メッセージが生成されます。

問題のあるコードの行は単純です: PyObject *value = PyUnicode_FromString("foo") これは実際にはPython3 ドキュメントから取られています。 この例の内容は、Python インタープリターで問題なくコンパイルされ、まったく同じコマンド ライン引数を使用して実行されgccます。

どんな助けでも大歓迎です!ありがとう!

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

python - PyErr_Set* 2 回

PyErr_Set*例外をオーバーライドするために呼び出しても安全ですか? ドキュメントによると、エラーが発生した場合、メッセージ引数が指定されPySequence_Fastた aが発生します。エラーが発生した後に呼び出しても安全でしょうか?TypeErrorconst char *PyErr_SetObjectPySequence_Fast

例: