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

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

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

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

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

C拡張だからですか?

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

python - 出力ファイルを Python 拡張機能に追加する

build_extピップフレンドリーにしようとしているファンキーな拡張機能を構築するためのカスタムを定義しました。以下は、私がやっていることのトリミングされたバージョンです。

このモジュールをパッケージ化して pip でインストールするとfoo、virtualenv の site-packages ディレクトリにモジュールができました。ディレクトリ構造は次のようになります。

このegg-info/SOURCES.txtファイルには、手動で作成/移動したファイルが含まれていません。コマンド__init__.pyを実行すると、virtualenv のサイト パッケージに残ります。pip でパッケージ全体を削除したいと思います。ビルド ディレクトリに手動で移動した生成ファイルを、インストールされている出力ファイルのリストに追加するにはどうすればよいですか?pip uninstall foofoo/__init__.py__init__.py

これは嫌でハッキーだと思うので、嫌でハッキーな答えを歓迎します!

試み:

  1. 追加packages=['foo']-- 私がそうすると、pip は拡張機能をビルドしません。また、パッケージ名のファイル パス/名前空間のバージョンを調整しようとしましたが、違いはありません。
0 投票する
2 に答える
914 参照

python - ctypesを使用して、Cに埋め込まれたPythonからC関数をコールバックできますか?

Pythonコードが埋め込まれたCプログラムがあります。ソースからpython2.7.2をコンパイルし、libpython2.7.aに対してプログラムをリンクしました。

今度はPythonコードで、Cプログラムにリンクされている他のCライブラリから関数をコールバックしたいと思います。Python拡張機能を作成できます(このドキュメントの「EmbeddedPythonの拡張」を参照)。ただし、ctypesを使用すると、これがはるかに簡単になり、既存のコードを変更せずに使用できるようになります。

ctypesは共有ライブラリのロードを対象としており、静的プログラムコードに「ポイント」する方法があるかどうか疑問に思っていました。

ターゲットがiOSであり、AFAIK共有ライブラリがAppleによって禁止されているため、関連するコードを共有ライブラリにコンパイルできません。

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

python - PyFrameObjectをPyObjectに変換する方法

何かが足りないかもしれませんが、ここに問題があります。

C拡張機能でPythonコードをトレースしていて、トレース関数がPyFrameObject*フレームを取得しました。ここで、Pythonコード(CythonによってCに埋め込まれるか変換される)でフレームを処理したいのですが、PyObject*を処理します。

PyFrameObject*をPyObject*に変換するにはどうすればよいですか?frameobject.hに適切な変換機能が見つかりません。

ありがとう。

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

python-c-extension - Python C拡張機能にsocketmodule.hを含めることは可能ですか?

Python C 拡張の socketmodule.h で定義された PySocketModule_ImportModuleAndAPI 関数を呼び出したいと思います。

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

python - 存在する python 拡張モジュールを読み込めません

実行時に拡張モジュールを作成する thanos を使用しようとしています。Thanos は、実行時に作成した拡張機能をインポートできないため、常に失敗しています。

どうしてこうなったのか不思議です。

実行時(コンパイル後)、「cutils_ext」ディレクトリには次が含まれますcutils_ext.so

import cutils_ext動作しますが、import cutils_ext.cutils_ext失敗します

私は直接 with imp でテストしました。cutils がインポートされた cutils_ext パッケージであるとします。私がする時:

私は再び得る:

私は完全に困惑しています。これをデバッグする方法はありますか? (picloudを使用して)Pythonインタープリターを起動できないため、詳細モードでPythonを実行できませんが、実行時に詳細を有効にできれば役立ちます(その方法がわかりませんでした)。

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

python - CとPythonの統合:ValueError:モジュール関数はMETH_CLASSまたはMETH_STATICを設定できません

私はCとPython2.7.3の統合に最初の冒険をしています。手始めに、基本的な加算を実行できるPython用のCモジュールを作成しようとしています。(これを理解したら、numpyのfindメソッドを作成したいのでnpfindと呼ばれます)

npfind.h:

npfind.c:

pynpfind.c:

npfind.py:

npfindsetup.py

結局のところ、Windows7では次のように入力します

これはうまくいくようです。次にnpfind.pyを見つけようとすると、次のエラーが発生します。

それが何を話しているのか理解できません。METH_CLASSとMETH_STATICとは何ですか、なぜそれらを設定しようとしているのですか?

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

python - C拡張コードからPythonリストを解放する

Pythonリストを作成し、それにデータ項目を追加するコードがいくつかあります。私たちの懸念は、データ項目の1つがNULLであることが判明した場合、リスト全体(つまり、以前に追加された項目)は無価値であると見なし、リストとそのメモリを解放したいということです。ガベージコレクターがすべてのメモリを解放するようにするには、何をする必要がありますか?

現在のコードは次のとおりです。

しかし、私たちはこのようなことをしたいと思います:

では、リストオブジェクトのDECREFは、GCがすべてを解放するのに十分ですか?

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

c++ - Python 拡張機能から C++ 仮想メンバーを呼び出すとクラッシュする

Python から呼び出すために、いくつかの C++ クラスの周りに薄いラッパーを作成しようとしています。具体的な問題は、virtual以下のコメントが外されている場合、インタープリターを作成しようとするとFoo()クラッシュすることです。この問題を解決するために、このコードを Boost::python、SWIG、または Pyxxx として書き直すことに興味はありません。これは、より大きなシステムからの抜粋です。これらのライブラリのいずれかがこの問題を解決する場合でも、なぜそうなるのか知りたいです。彼らがそれをどのように実装しているか知りたいです。extern "C"拡張モジュールをセットアップしてシステムに型を登録すると、Python インタープリターからの呼び出しは、Python 型のスロットに登録するクラスの静的メンバーを使用するか、または単に持つだけで、問題なく機能します。

メンバーを仮想として宣言すると、それを (Python インタープリターからの呼び出し内で) 呼び出そうとすると、不正なメモリ アクセスでクラッシュが発生します。アクセスされるアドレスは、クラス メンバーをポインターとして出力した場合に得られるオフセットです。従うべき特定のコードがありますが、基本的な質問は次のとおりです。Python によって呼び出される C ランタイム環境の何かが、仮想クラス メンバー関数のディスパッチを台無しにしますか? Python は v2.6.7 で、C++ 拡張機能は GCC 4.2.1 でコンパイルされています。Boost::python がこれをサポートしていることを示唆する関連する質問があります。彼らはそれを直接行っていますか、それともクラス メンバー関数を介してシミュレートしていますか?

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

python - Python C 拡張で __init__ に docstring を指定する方法

__init__おそらくばかげた質問です: C 拡張機能を作成するときなど、特別な関数に docstring を指定するにはどうすればよいでしょうか? 通常のメソッドの場合、メソッド テーブルにはドキュメント文字列が用意されています。help(myclass) を試すと、次の自動生成されたドキュメントが表示されます。

しかし、これは私がオーバーライドしたいものです。