Adam Matanや他の人が主張していることとは反対に、実際には、純粋なPython(.py)ファイルからCythonを使用して単一の実行可能バイナリファイルを作成できます。
はい、Cythonは、CPythonpythonランタイム用のC / C ++拡張モジュールの記述を簡素化する方法として前述のように使用することを目的としています。
ただし、nudzoがこのコメントでほのめかしているように--embed
、コマンドラインプロンプトでスイッチを使用できます。
これは非常に簡単な例です。私はこれをDebianSidワークステーションからpython3とcython3を使用して実行しています。
事前にpython-devまたはpython3-devパッケージがインストールされていることを確認してください。
1)hello.pyという非常に単純なPythonプログラムを作成します
$ cat hello.py
print( "Hello World!")
2) Cythonを使用してPythonプログラムをCにコンパイルします...
cython3 --embed -o hello.c hello.py
3) GCCを使用して、hello.cをhello ...という実行可能ファイルにコンパイルします。
gcc -Os -I /usr/include/python3.3m -o hello hello.c -lpython3.3m -lpthread -lm -lutil -ldl
4)hello ...というファイルになります。
$ file hello
こんにちは:ELF 64ビットLSB実行可能ファイル、x86-64、バージョン1(SYSV)、動的リンク(共有ライブラリを使用)、GNU / Linux 2.6.32、BuildID [sha1] = 006f45195a26f1949c6ed051df9cbd4433e1ac23、ストリップされていません
$ ldd hello
linux-vdso.so.1 (0x00007fff273fe000)
libpython3.3m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.3m.so.1.0 (0x00007fc61dc2c000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc61da0f000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc61d70b000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fc61d508000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc61d304000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc61cf5a000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc61cd52000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fc61cb28000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc61c90f000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc61e280000)
この場合、実行可能ファイルは私のDebianシステム上のPython3.3に動的にリンクされています。
5)こんにちはを実行します...
$ ./hello
"こんにちは世界"
ご覧のとおり、このメソッドを使用すると、基本的にCythonを使用して、純粋なPythonアプリケーションを実行可能なコンパイル済みオブジェクトコードに変換できます。
私はこのメソッドを非常に複雑なアプリケーション(たとえば、本格的なPython / PySide / Qtアプリケーション)に使用しています。
Pythonのさまざまなバージョンでは、gcc-I
と-l
スイッチを適切に調整します。
その後、Python / PySide / Qtファイルをパッケージ化することなく、実行可能ファイルをディストリビューション(.debなど)ファイルとしてパッケージ化できます。これには、ディストリビューションを同じファイルに更新した後でも、アプリケーションを実行できるという利点があります。そのディストリビューションのPythonなどのバージョン。