cython 튜토리얼
Cython 시작하기
수색…
비고
Cython이란 무엇입니까?
Cython 프로그래밍 언어는 정적 유형 지정, C 함수를 직접 호출하는 기능 및 기타 여러 기능과 같은 C로 Python을 풍부하게합니다. 이렇게하면 Python과 유사한 구문을 사용하면서 C 수준 성능에 도달 할 수 있습니다.
어떻게 작동합니까?
Cython 코드는 cython 소스 - 소스 컴파일러를 사용하여 컴파일되어 C 또는 C ++ 코드를 생성합니다.이 코드는 C 컴파일러를 사용하여 컴파일 할 수 있습니다. 파이썬이나 실행 파일에서 가져올 수있는 확장을 만들 수 있습니다.
순수 Python과 달리 Cython이 얻을 수있는 주요 성능 향상은 CPython API를 우회하는 데 있습니다. 예를 들어, 두 개의 정수를 더할 때 파이썬은 각 변수에 대한 유형 검사를 수행하고 발견 된 유형을 충족시키는 추가 함수를 찾고 해당 함수를 호출합니다. Cython에서 생성 된 C 코드에서 유형은 이미 알고 있으며 오직 하나의 함수 호출 만 수행됩니다. 따라서 Cython은 유형이 명확한 수학 문제에 특히 효과적입니다.
내 코드 속도를 높이려면 어떻게 사용합니까?
일반적인 사용 사례는 Cython을 사용하여 프로그램 속도를 높이 려 할 때 코드를 프로파일 링하고 계산 비싼 부품을 컴파일 된 Cython 모듈로 이동하는 것입니다. 이렇게하면 코드의 대부분에 대해 Python 구문을 유지하고 가장 필요한 곳에 빠른 속도를 적용 할 수 있습니다.
Cython 설치하기
사이 썬을 사용하려면 두 가지가 포함되어 필요하신 사이 썬 패키지 자체이다 cython
(예를 들어, NumPy와에 대한) 여러 C와 파이썬 라이브러리 소스 - 소스 컴파일러와 사이 썬 인터페이스를. cython
컴파일러에 의해 생성 된 C 코드를 컴파일하려면 C 컴파일러가 필요합니다.
1 단계 : Cython 설치
시스템 불가 지론
Cython 은 여러 시스템 불가지론 패키지 관리 시스템과 함께 설치할 수 있습니다. 여기에는 다음이 포함됩니다.
pip 또는 easy_install을 통한 PyPI :
$ pip install cython $ easy_install cython
아나콘다 콘도를 사용 :
$ conda install cython
enpkg 패키지 관리자를 사용하여 Enthought 캐노피 :
$ enpkg cython
또한 소스 코드는 github 에서 다운로드하여 다음을 사용하여 수동으로 설치할 수 있습니다.
$ python setup.py install
우분투, 데비안
우분투에서는 cython
과 cython3
패키지를 사용할 수 있습니다. 이들은 위에서 언급 한 설치 옵션보다 오래된 버전을 제공합니다.
$ apt-get install cython cython3
Windows
Windows의 경우 pip를 사용하여 설치할 수있는 .whl 파일 은 타사에서 제공합니다. Windows에서 .whl 파일을 설치하는 방법에 대한 자세한 내용은 여기를 참조하십시오 .
2 단계 : C 컴파일러 설치
Cython에 의해 생성 된 C 파일을 컴파일하려면 C 및 C ++ 용 컴파일러가 필요합니다. gcc 컴파일러가 권장되며 다음과 같이 설치할 수 있습니다.
우분투, 데비안
build-essential
패키지에는 필요한 모든 것이 들어 있습니다. 다음을 사용하여 리포지토리에서 설치할 수 있습니다.
$ sudo apt-get install build-essential
맥
XCode 개발자 도구 에는 gcc와 유사한 컴파일러가 포함되어 있습니다.
Windows
MinGW (Windows 용 Minimalist GNU)에는 gcc의 Windows 버전이 포함되어 있습니다. Visual Studio의 컴파일러를 사용할 수도 있습니다.
안녕하세요 세계
파이썬에서 사용되기 전에 Cython pyx 파일을 C 코드 ( cythonized )로 변환하고 컴파일해야합니다. 일반적인 접근법은 확장 모듈을 생성 한 다음 파이썬 프로그램으로 가져 오는 것입니다.
암호
이 예제에서는 세 개의 파일을 만듭니다.
-
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.py
실행할 수 있습니다.
$ python test.py
(23.0 ^ 2) + 23.0 = 552.0