Cythonを使用して.soファイルにコンパイルされたPythonモジュールをロードできるPython2.6プログラムがあります。Cythonを使用して.pyモジュールを.soファイルにコンパイルすると、すべて正常に動作します。
これは、私がCythonで使用するsetup.pyファイルです。
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [
Extension("ldap", ["ldap.pyx"]),
Extension("checker", ["checker.pyx"]),
Extension("Finder", ["Finder.pyx"]),
Extension("utils", ["utils.pyx"]),
]
setup(
name = 'bchecker',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules
)
だから、Cythonを使用してPythonモジュールをコンパイルできることは知っています(CythonはPythonファイルからCファイルを作成してからコンパイルします)メインのPythonプログラムをLinuxプラットフォームで実行できるものにコンパイルしますか?その場合は、Cythonコマンドラインの例を使用してください。ありがとうございます。
Adam Matanや他の人が主張していることとは反対に、あなたはcan実際にCythonを使用して、純粋なPython(.py)ファイル。
はい、CythonはCPython pythonランタイム用のC/C++拡張モジュールの記述を簡素化する方法として-述べられているように使用することを目的としています。
しかし、nudzoがこの comment で言及しているように、--embed
コマンドラインプロンプトで切り替えます。
これは非常に単純な例です。 python3とcython3を使用して、Debian Sidワークステーションからこれを実行しています。
事前にpython-devまたはpython3-devパッケージがインストールされていることを確認してください。
1)非常に簡単なPythonというプログラムを作成hello.py
$ 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システムのPython 3.3に動的にリンクされます。
5)runhello...
$ ./hello
"こんにちは世界"
ご覧のとおり、このメソッドを使用すると、基本的にCythonを使用して、純粋なPythonアプリケーションを実行可能なコンパイル済みオブジェクトコードに変換できます。
非常に複雑なアプリケーション(たとえば、本格的なPython/PySide/Qtアプリケーション)にこのメソッドを使用しています。
Pythonの異なるバージョンでは、gcc-I
および-l
は、必要に応じて切り替わります。
その後、Python/PySide/Qtファイルをパッケージ化することなく、実行可能ファイルをディストリビューション(.debなど)ファイルとしてパッケージ化できます。同じものへのディストリビューション更新後でもアプリケーションを実行できるという利点があります。そのディストリビューションのPythonなどのバージョン。
CythonはEXEにコンパイルできますか? への回答をご覧ください。
Embedding Cython のリンクは開始するのに適した場所のようですが、Cythonの主な目的ではないため、それがいかに簡単かはわかりません。
これが役立つかどうかはわかりませんが、Nudzoは正しいです。あなたはcython --embed -o main.o main.py
でそれを得ることができ、それからcl/EHscで結果をコンパイルしようとします