PythonがAPIを提供するので、CコードでPythonインタープリターを呼び出すことができますが、必要なのはその逆です。
私のプログラムはC APIを使用する必要があるため、コードはCで作成する必要があります。しかし、プログラムをPythonでパッケージ化することも必要です。つまり、これらのC関数または実行可能ファイルをPythonで呼び出したいということです。それは可能ですか?
Cコードをライブラリにしたい、つまりPythonで#include
と*.o
のリンケージで使用することを意味する場合、どうすればいいですか?それは可能ですか? Cコードを実行可能ファイルに書き込むと、つまりコマンドになりますが、Pythonで直接呼び出すことができますか?
また、Pythonコードをコンパイルできると聞きましたが、それはソースファイルなしでコードを実行できるということですか?出力ファイルはバイナリファイルですか?パフォーマンスが向上しますか?
これらのC関数または実行可能ファイルをPythonで呼び出したいです。それは可能ですか。
はい、モジュールとしてインポートできるCコードを記述できます。Pythonモジュールとして。Pythonこれらを呼び出す拡張モジュール 。Pythonから直接呼び出すことができます。 documentation の例:
Pythonコード
import example
result = example.do_something()
Cコード
static PyObject * example(PyObject *self)
{
// do something
return Py_BuildValue("i", result);
}
Cコードをライブラリにしたい場合、つまり#includeを使用して、Pythonで* .oのリンケージを使用する場合は、その方法またはそれが可能です。
共有ライブラリ*。dllまたは*。soとしてビルドします。distutilsを使用してモジュールを配布することもできます。
Cコードを実行可能ファイルに書き込んだ場合、つまりコマンドになった場合、pythonで直接呼び出すことができますか?
*。exeを記述した場合、反対のことを行います( Python from C )。選択する方法(exeと共有ライブラリ)は、 "CプログラムとPython"または "PythonプログラムとC 「。
また、pythonコードをコンパイルできるということは、ソースファイルなしでコードを実行できることを意味しますか?出力ファイルはバイナリファイルですか?パフォーマンスが向上しますか?
Pythonは*。pyファイルを読み取り、実行時に*。pycbytecodeファイルにコンパイルします。次に、バイトコードはPython仮想マシンで実行されます。つまり、 "ソースからバイトコードへの再コンパイルを回避できるため、同じファイルの2回目の実行が高速になります。」 (Python用語集)から*。pyファイルを編集していない場合、*。pyc。*。pyファイルなしで*。pycファイルを配布できますが、暗号化されず、リバースエンジニアリングできます。
extendPython(これは些細なことではありませんが、btw)は必要ありませんが、ctypes。
はい、C/C++でPythonを拡張できます。
ドキュメントをご覧ください: Extending Python with C or C++