Cythonを使用してpythonファイルを.soファイルにパッケージ
3632 ワード
python
は強力なスクリプト言語として、優位性はもちろん、現在の中低周波数の量子化投資は基本的にpython
をresearch
とproduction
を言語として使用している.しかし,我々のモデルが複雑で演算量が大きい場合,python
の短板が現れるのは,演算速度が遅いことである.もちろん、この問題を解決するには多くの方法がある.例えば、筆者が前に述べた
pypy
のjit
技術であるが、安定性を除いては、pypy
の使用には多くの制限があり、それほどエンジニアリング化されていない.そこで,本稿から,Cython
の一連の文章を紹介し,将来量子化や他の応用シーンにおけるいくつかの再計算部分を単独で取り出し,Cython
で書き換え,独立してモジュール化して演算速度を向上させる.まず、
C
言語はコンパイル言語であり、Python
は解釈言語であることはよく知られています.簡単に言えば、Python
実行は逐行実行であり、コンパイルを実現する必要はありませんが、C
は実行前にコンパイルする必要があります.では、実行前に事前にコンパイルする必要がある場合、実際には「神の視点」という感じがして、自然に多くの最適化をすることができて、コードの実行をもっと速くすることができます.Cython
の出現はこの目的であり、Python
をコンパイルして実行することもできる.皆さんはCpython
とCython
を区別しなければなりません.python
はpython
の一種と考えられていますが、実は皆さんが普段使っている基本は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
であり、.cyx
がcython
言語のスーパーセットである以上、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 --inplace
はbuild_est
ファイルをソースコードpyxの隣に置く、つまり同じディレクトリの下に置くという意味です.そして、私たちは2つのファイルを見ることができます.1つは
inplace
、1つは.so
(windowsであれば.pyd)ここで、hello.c
ファイルはcythonが私たちのpyxファイルをプラットフォームに依存せず、後ろのhello.so
または.c
ファイルに解析します..so
ファイルをコンパイルしたファイルで、プラットフォームに依存します.この場合、
.pyd
ファイルまたは.c
ファイルは、通常の.so
ファイルのように、.pyd
もちろん、毎回このようにpython
ファイルを書いてコンパイルするのは面倒ですが、幸いなことにimport
は便利な解決策を提供してくれました.setup
のcython
コードを書き終わったら、コンパイルする必要はありません.私たちが使用する必要があるときは、ファイルの前にimport pyximport
pyximport.install()
import hello
それからいいです.実はコンパイルしなくてもいいのではなく、
hello.pyx
黙ってコンパイルしてくれて、他の場所に置いておきました.