問題タブ [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.
python - 可変数の引数を持つ Python 拡張モジュール
私は、C 拡張モジュールで変数 (そしておそらく) が関数に対して非常に多数の引数を持つ方法を理解しようとしています。
PyArg_ParseTupleについて読むと、受け入れる数を知る必要があるようです。必須のものとオプションのものがありますが、すべて独自の変数があります。私はPyArg_UnpackTupleがこれを処理できることを望んでいましたが、間違った方法で使用しようとするとバスエラーが発生するようです。
例として、次の python コードを取り上げます。これは、拡張モジュール (C) にすることができます。
これは、任意の数の引数で呼び出すことも、hypot(3,4,5)
、hypot([3,4,5])
、 を反復処理することもでき、hypot(*[3,4,5])
すべて同じ答えを返します。
私のC関数の開始は次のようになります
多くの人がyasar11732と考えています。次に紹介するのは、完全に機能する拡張モジュール (_toolboxmodule.c) です。これは、単純に任意の数値または整数の引数を取り、それらの引数で構成されたリストを返します (名前が良くありません)。おもちゃですが、何をする必要があるかを示しています。
Pythonでは、次のようになります。
python - 初期化時のPythonエラーの埋め込み
C コードを実行して Python 関数を呼び出すと、Py_Initialize() でエラーが発生します。エラーは ImportError: No module named site です。Py_SetProgramName(argv[0]) を入れようとしましたが、うまくいきません。cmd 呼び出しは cInterfacePython Test.py 乗算 3 2 (exe は cInterfacePython) です。
python - PyInt を C Int に変換する
PyInt を C int に変換する必要があります。私のコードでは
pValue は PyObject、PyList です。私が抱えていた問題は、PyList_Size が正しいリスト サイズを返さないことです (カウントは 5 であるはずですが、600 万になりました)。または、C コードで Python スクリプトにインターフェイスしているため、データ型に問題があります。理想的には、count を C の int 型にしたいと考えています。
長いCデータ型を返すpython/c APIを見つけました...これは私が望んでいるものではありません...誰かが正しいメソッドまたはAPIを教えてくれますか??
python - Python C拡張機能:拡張機能PYDまたはDLLを使用しますか?
私はCで書かれたPython拡張機能を持っていますが、Windowsでファイル拡張子DLLまたはPYDを使用する必要があるのでしょうか。(そして私はLinuxで何を使うでしょうか?)
(ファイル名以外に)違いはありますか?
非公式の記事を見つけました。これがpycの秘密ですか?このトピックに関する公式記事が見つからないのはなぜですか?
python - C 構造体を Python 関数に渡す
C 構造体を Python 関数に渡す簡単な方法が必要です。ゲーム サーバーに Python を埋め込んでおり、Python でゲーム ロジックを作成する予定です。Google とメーリング リストを調べましたが、役立つものは何も見つかりませんでした。私は C で複雑な構造 (他の比較的複雑な構造へのポインタを含む) を持っていますが、これを行う合理的な方法が見つかりませんでした。
私はこの構造体を持っています:
そして、それをPython関数に渡す必要があります。そこでは、一般的な構文でメンバーに簡単にアクセスできます(辞書のようなものを使用しないことが望ましいですが、それも問題ありません)。PyObject_FromStruct 関数か何かが必要なようです。
これを行う比較的簡単な方法はありますか?
python - pip の使用時に distutils が使用するログ レベルを設定するにはどうすればよいですか?
error: Unable to find vcvarsall.bat
afterの理由を調べようとしていますpip install greenlet
。distutils で使用されるログ レベルを設定して、次のようなデバッグ メッセージが出力されるようにしlog.debug("Unable to find productdir in registry")
たいと考えています。見た後、うまくいくはずだdef parse_command_line(self):
と思いpip install --install-option="-vv" greenlet
ましたが、うまくいきません(冗長性はまだ1です)。
これどうやってするの?
python - Python のさまざまな OS/バージョン用に Python C/C++ 拡張機能をどのようにコンパイルしますか?
いくつかの成熟した Python ライブラリには、ほとんどのアーキテクチャ (Win32/Win-amd64/MacOS) および Python のバージョン用にコンパイル済みのバージョンがあることに気付きました。さまざまな環境向けに拡張機能をクロスコンパイルする標準的な方法は何ですか? ワイン?仮想マシン? クラウドソーシング?
python - ブール値をPythonC拡張機能に渡す「正しい」方法は何ですか?
これは、Pythonドキュメント(http://docs.python.org/extending/extending.html)の簡単な例です。
追加のブールパラメータを関数に渡したい場合-それを行うための「正しい」方法は何ですか?
PyArg_ParseTuple()に渡すboolオプションはないようです。だから私は次のことを考えました:
- 整数を読み取り、値を使用するだけです(boolはintのサブクラスであるため)
- 整数でPyBool_FromLong()を呼び出す
- 読み取り、オブジェクトを作成し、PyBool_Check()を呼び出して、ブール値であることを確認します
- おそらく、任意のタイプの変数を取得してその真理値を取得する方法があります(つまり、空の配列は偽物などです)。これは、Python関数が通常行うことです。
これらのいずれかが望ましいですか?別のオプション?
python - C拡張機能を備えたPythonアプリケーションを整理して配布する方法は?
私は、ソース(zip形式)およびpy2exe(大部分)を介して配布されるPythonアプリケーションに取り組んでいます。
ここで、いくつかのモジュールをC拡張機能に置き換えることで高速化したいと思います。これは、開発部分で非常にうまく機能します。しかし、配布と組織化は私に頭痛の種を与えます...
私の現在の構造は次のようになります。
私の質問は、C拡張機能のセットアップ呼び出し/ファイルをどこに配置する必要があるかということです。常にを介してアプリケーションを実行できるmain.py
ようにしたい(したがって、ディストリビューションがC拡張機能をコンパイルするのを待たないようにしたい)が、ディストリビューションが常に最新のC拡張機能を備えていることも確認したい。
助けてくれてありがとう!