サーチ…


備考

Cythonとは何ですか?

Cythonプログラミング言語は、Cのような静的型付け、C関数を直接呼び出すことができる機能、およびその他のいくつかの機能によってPythonを強化します。これにより、Pythonのような構文を使用しながらCレベルのパフォーマンスに到達できます。

どのように機能するのですか?

Cythonコードはcython source-to-sourceコンパイラを使用してコンパイルされ、CまたはC ++コードを作成します。これはCコンパイラを使用してコンパイルできます。これにより、Pythonや実行可能ファイルからインポートできる拡張機能を作成することができます。

純粋なPythonとは対照的に、Cythonが達成できる主なパフォーマンスの向上は、CPython APIをバイパスすることによってもたらされます。たとえば、2つの整数を追加する場合、Pythonは各変数の型チェックを実行し、見つかった型を満たすadd関数を見つけ出し、その関数を呼び出します。 Cythonで生成されたCコードでは、型は既に分かっていて、呼び出す関数は1つだけです。したがって、Cythonは特に、型が明確な数学的問題に輝きます。

コードを高速化するためにどのように使用しますか?

一般的な使用例は、Cythonを使用してプログラムをスピードアップしようとするときに、コードをプロファイルし、計算上高価な部分をコンパイル済みのCythonモジュールに移動することです。これにより、大量のコードに対してPython構文を保持し、最も必要な場所で高速化を適用することができます。

Cythonのインストール

Cythonを使用するために、2つのものが含まneeded.The Cythonパッケージ自体、あるcython (例えばnumpyのための)いくつかのCとPythonライブラリにソース-ソースコンパイラとCythonインターフェイスを。 cythonコンパイラによって生成されたCコードをコンパイルするには、Cコンパイラが必要です。

ステップ1:Cythonのインストール

システムアジノス

Cythonはいくつかのシステムに依存しないパッケージ管理システムと共にインストールできます。これらには、

  1. pipまたはeasy_installを介してPyPI

    $ pip install cython
    $ easy_install cython
    
  2. アナコンダを使用してconda:

    $ conda install cython
    
  3. enpkgパッケージマネージャを使用したEnthought Canopy:

    $ enpkg cython
    

また、ソースコードはgithubからダウンロードして、以下を使用して手動でインストールできます。

$ python setup.py install

Ubuntu、Debian

Ubuntuでは、 cythoncython3のパッケージを利用できます。これらは、上記のインストールオプションより古いバージョンを提供することに注意してください。

$ apt-get install cython cython3

Windows

Windowsの場合、pipを使用してインストールできる.whlファイルはサードパーティによって提供されます。 .whlファイルのWindowsへのインストールに関する詳細は、 こちらを参照してください


手順2:Cコンパイラのインストール

Cythonで生成されたCファイルをコンパイルするには、CおよびC ++のコンパイラが必要です。 gccコンパイラが推奨され、次のようにインストールできます。

Ubuntu、Debian

build-essentialパッケージには、必要なものがすべて含まれています。リポジトリからインストールするには、次のコマンドを使用します。

$ sudo apt-get install build-essential

マック

XCode開発ツールには、gccのようなコンパイラが含まれています

Windows

MinGW (Minimalist GNU for Windows)にはWindows版のgccが含まれています。 Visual Studioのコンパイラも使用できます。

こんにちは世界

PythonからPythonファイルを使用するには、CythonのpyxファイルをCコード( cythonized )に変換してコンパイルする必要があります。一般的なアプローチは、拡張モジュールを作成してPythonプログラムにインポートすることです。

コード

この例では、3つのファイルを作成します。

  • hello.pyxにはCythonコードが含まれています。
  • test.pyはhello拡張を使用するPythonスクリプトです。
  • setup.pyはCythonコードをコンパイルするために使われます。

hello.pyx

from libc.math cimport pow

cdef double square_and_add (double x):
    """Compute x^2 + x as double.

    This is a cdef function that can be called from within
    a Cython program, but not from Python.
    """
    return pow(x, 2.0) + x

cpdef print_result (double x):
    """This is a cpdef function that can be called from Python."""
    print("({} ^ 2) + {} = {}".format(x, x, square_and_add(x)))

test.py

# Import the extension module hello.
import hello

# Call the print_result method 
hello.print_result(23.0)

setup.py

from distutils.core import Extension, setup
from Cython.Build import cythonize

# define an extension that will be cythonized and compiled
ext = Extension(name="hello", sources=["hello.pyx"])
setup(ext_modules=cythonize(ext))

コンパイル

これは、 cython hello.pyxを使用してコードをCに変換し、 gccを使用してコンパイルすることによって実行できます。より簡単な方法は、distutilsにこれを処理させることです:

$ ls
hello.pyx  setup.py  test.py
$ python setup.py build_ext --inplace
$ ls
build  hello.c  hello.cpython-34m.so  hello.pyx  setup.py  test.py

共有オブジェクト(.so)ファイルをPythonからインポートして使用することができるので、 test.pytest.pyを実行することができます:

$ python test.py
(23.0 ^ 2) + 23.0 = 552.0 


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow