Cythonを使用してpythonファイルを.soファイルにパッケージ

3632 ワード

pythonは強力なスクリプト言語として、優位性はもちろん、現在の中低周波数の量子化投資は基本的にpythonresearchproductionを言語として使用している.しかし,我々のモデルが複雑で演算量が大きい場合,pythonの短板が現れるのは,演算速度が遅いことである.
もちろん、この問題を解決するには多くの方法がある.例えば、筆者が前に述べたpypyjit技術であるが、安定性を除いては、pypyの使用には多くの制限があり、それほどエンジニアリング化されていない.そこで,本稿から,Cythonの一連の文章を紹介し,将来量子化や他の応用シーンにおけるいくつかの再計算部分を単独で取り出し,Cythonで書き換え,独立してモジュール化して演算速度を向上させる.
まず、C言語はコンパイル言語であり、Pythonは解釈言語であることはよく知られています.簡単に言えば、Python実行は逐行実行であり、コンパイルを実現する必要はありませんが、Cは実行前にコンパイルする必要があります.では、実行前に事前にコンパイルする必要がある場合、実際には「神の視点」という感じがして、自然に多くの最適化をすることができて、コードの実行をもっと速くすることができます.Cythonの出現はこの目的であり、Pythonをコンパイルして実行することもできる.皆さんはCpythonCythonを区別しなければなりません.pythonpythonの一種と考えられていますが、実は皆さんが普段使っている基本はcpythonです.Cythonは、Cython言語の一部を含み、変更する言語であり、C言語を完全に含む言語の集合である.しばらく勉強してから、みんなはきっとこの言葉をもっと理解するに違いない.
まずpython作成の流れを見てみましょう.cythonを書く前に、私たちはcythonコンパイラが必要です.筆者は現在cを使っていますが、なぜか、以前win10のように面白くないので、win7の下でコンパイルしました.もし皆さんがlinuxプラットフォームであれば、まずwindows専用のコンパイラをインストールする必要があります.筆者のバージョンはpythonです.リンクは以下の通りです.
https://www.microsoft.com/en-us/download/confirmation.aspx?id=44266
そしてプロセスをテストします.まず、2.7のファイル接尾辞はcythonであり、.cyxcython言語のスーパーセットである以上、pythonの中で純cyxファイルを実行しても問題ないことを知っておく必要があります.
新しいpythonファイルを作成し、入力します.
print "Hello World"

特別なものはありません.次に、cythonコンパイラを使用してpyxをコンパイルしてcythonファイルを折りたたむスクリプトを新規作成します.hello.pyxファイルのコードは簡単です.
from distutils.core import setup
from Cython.Build import cythonize
 
setup(ext_modules=cythonize("hello.pyx"))

次にsetup.pyファイルを実行します.setup.setupはextensionファイルをコンパイルするという意味で、python setup.py build_ext --inplacebuild_estファイルをソースコードpyxの隣に置く、つまり同じディレクトリの下に置くという意味です.
そして、私たちは2つのファイルを見ることができます.1つはinplace、1つは.so(windowsであれば.pyd)ここで、hello.cファイルはcythonが私たちのpyxファイルをプラットフォームに依存せず、後ろのhello.soまたは.cファイルに解析します..soファイルをコンパイルしたファイルで、プラットフォームに依存します.
この場合、.pydファイルまたは.cファイルは、通常の.soファイルのように、.pydもちろん、毎回このようにpythonファイルを書いてコンパイルするのは面倒ですが、幸いなことにimportは便利な解決策を提供してくれました.setupcythonコードを書き終わったら、コンパイルする必要はありません.私たちが使用する必要があるときは、ファイルの前に
import pyximport
pyximport.install()
import hello

それからいいです.実はコンパイルしなくてもいいのではなく、hello.pyx黙ってコンパイルしてくれて、他の場所に置いておきました.