問題タブ [python-c-api]
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 - C APIを使用して、Pythonで宣言されたPythonクラスのインスタンスを作成します
__main__
C API でスコープに定義された Python クラスのインスタンスを作成したいと考えています。
たとえば、クラスが呼び出さMyClass
れ、次のように定義されます。
クラス型は__main__
スコープの下にあります。
C アプリケーション内で、このクラスのインスタンスを作成したいと考えています。PyInstance_New
これは、クラス名を取るため、単純に可能でした。ただし、この関数は Python3 では使用できません。
代替案のヘルプや提案をいただければ幸いです。
ありがとう、ポール
c++ - Python の拡張中に C++ 機能を使用できますか?
Python のマニュアルには、C と C++ の両方で Python のモジュールを作成できると書かれています。C++ を使用する場合、クラスやテンプレートなどを利用できますか? 残りのライブラリーやインタープリターとの互換性がなくなるのではないでしょうか?
python - 組み込み Python の停止
Python インタープリターを C プログラムに埋め込んでいます。ただし、一部の python スクリプトをPyRun_SimpleString()
実行しているときに、無限ループに陥ったり、長時間実行されたりすることがあります。PyRun_SimpleString("while 1: pass");
メインプログラムがブロックされるのを防ぐために、インタープリターをスレッドで実行できると考えました。
プロセス全体を強制終了せずに、スレッドで実行されている組み込みインタープリターで python スクリプトの実行を停止するにはどうすればよいですか?
インタプリタに例外を渡すことは可能ですか? シグナルをリッスンする他のスクリプトの下にスクリプトをラップする必要がありますか?
PS: Python を別のプロセスで実行することもできますが、これは私が望むものではありません - それが最後の手段でない限り...
アップデート:
だから、それは今動作します。デニス・オトキダッハ、もう一度ありがとう!
これが正しければ、2 つのことを行う必要があります。インタープリターに停止するように指示しreturn -1
、PyRun_SimpleString() が実行されているのと同じスレッドで実行します。
停止するには、いくつかの可能性があります:PyErr_SetString(PyExc_KeyboardInterrupt, "...")
またはPyErr_SetInterrupt()
- 最初の方法では、Python がさらにいくつかの命令を実行したままにしてから停止し、後の方法ではすぐに実行を停止します。
Python の実行に関数呼び出しを挿入するためreturn -1
に使用します。Py_AddPendingCall()
ドキュメントではバージョン 2.7 および 3.1 以降で言及されていますが、以前の Python でも動作します (ここでは 2.6)。2.7 と 3.1 からは、スレッドセーフでもあるはずです。つまり、GIL を取得せずに呼び出すことができます (?)。
したがって、次の例を書き直すことができます。
python - Python が False と True の参照カウントを維持するのはなぜですか?
hasattr 組み込み関数のソース コードを調べていたところ、興味をそそられた次の 2 行に気付きました。
グローバルな値ではPy_False
ありませんか? Py_True
まったくの好奇心から、Python がこれらの変数の参照カウントを保持しているのはなぜですか?
c++ - C++ クラスとしての Python インタープリター
私はpythonをc ++に埋め込むことに取り組んでいます。いくつかの特殊なケースでは、同じスレッドでインタープリターの 2 つの別個のインスタンスが必要です。
Python インタープリターを C++ クラスにラップして、2 つ以上のクラス インスタンスからサービスを取得できますか?
c++ - PyDateTime_IMPORT マクロが PyDateTimeAPI 変数を初期化しない
Visual Studio 2008 を使用して、Windows で Python C API を使用しています。PyDate_Check
マクロやその他の関連マクロを使用しようとすると、静的変数 PyDateTimeAPI が null であるため、アクセス違反が発生します。この変数はPyDateTime_IMPORT
、日時マクロを使用する前に呼び出す必要があるマクロを使用して初期化されます。これは、別のスレッドで新しい Python サブインタープリターを作成するときに行います。
いくつかの質問: - マクロの関数がnull を返す
のはなぜですか。null の戻り値は、モジュールが見つからないためだと理解しています。しかし、どうして datetime モジュールが見つからないのでしょうか? サブインタープリターの sys.path が正しくないためでしょうか? - また、サブインタープリターが初期化された直後、または Python インタープリターが初期化されたときに、正しい場所でマクロを呼び出していますか?PyCObject_Import
PyDateTime_IMPORT
PyDateTime_IMPORT
PyDateTime_IMPORT
意味:
python - PyAPI_DATA()マクロの説明?
Web全体を検索しましたが、ドキュメントやPyAPI_DATA()の機能の簡単な説明さえ見つからないようです( Pythonヘッダーファイルで使用され、 python.orgで引用されていますが)。誰かがこれが何であるかを説明したり、私が見落としているドキュメントを指摘したりできますか?
ありがとう。
python - Python setup.py スクリプトでフラグを gcc に渡す方法は?
CoreFoundation フレームワーク (とりわけ) を必要とする Python 拡張機能を C で作成しています。これは次のようにコンパイルできます:
(「-framework」は Apple 専用の gcc 拡張機能ですが、とにかく特定のフレームワークを使用しているので問題ありません)
setup.py にこのフラグを gcc に渡すように指示するにはどうすればよいですか?
私はこれを試しましたが、うまくいかないようです (コンパイルはできますが、実行しようとすると未定義のシンボルが表示されます):
編集:
これはうまくいくようです:
python - ネストされたPythonC拡張機能/モジュール?
別のモジュールに対してローカルになるようにC-Pythonモジュールをコンパイルするにはどうすればよいですか?たとえば、「bar」という名前のモジュールと「mymodule」という名前の別のモジュールがある場合、「importmymodule.bar」を介してインポートされるように「bar」をコンパイルするにはどうすればよいですか。
(言い回しが不十分な場合は申し訳ありませんが、適切な用語が何であるかわかりませんでした。)
setup.pyで次のことを試しましたが、機能しないようです。
編集
アレックスに感謝します。だからこれは私が使用することになったものです:
もちろん、を含む「mymodule」という名前のフォルダがあります__init__.py
。
python - C++ モジュールで PyTuple を作成するとクラッシュする
このコードに問題があります。C++ モジュールからタプル (座標) のタプルを返そうとしています。リストには 2 つの sdirty
が含まれているので、リスト内の項目のとの値はそれぞれとです。初めてこれを試みるので、ドキュメントなどを誤解している可能性があります。ヒントはありますか?Coord
len
x
y
0,0
0,1
編集:ああ、言い忘れましたが、実際のクラッシュは進行中ですPyTuple_Set_ITEM
。