Cython
#
Find similar titles
- 최초 작성자
- 최근 업데이트
Structured data
- Category
- Programming
Cython, 파이썬(Python)을 위한 C 확장 기술 #
순수한 파이썬 언어로 프로그램을 만들 시 C 언어로 작성된 프로그램에 비해 느리다. 인터프리터 언어인 파이썬 특성상 컴파일 언어인 C 언어에 비해 속도가 느린 것이다. 파이썬이 계속 개발되면서 예전에 비하면 속도가 많이 올라갔지만, 일부분은 C 언어가 더 빠르다. 사이썬은 파이썬 코드를 C 언어로 컴파일 함으로써 속도를 향상 시킨다.
공식 홈페이지 #
사용법 #
시작하기 #
scientific Python distributions인 Anaconda, Enthought Canopy, Sage등은 Cython을 기본 번들로 제공하고 있어 추가적인 설정 및 모듈 설치가 필요 없지만, 버전을 업데이트하거나 배포판을 사용하지 않을 경우 아래와 같은 방법으로 설치 및 업데이트할 수 있다.
우선 사전에 필요한 gcc를 설치한다.
Linux : GNU C Compiler (gcc), build-essential, Python Header File이 기본적으로 필요하다. 해당 모듈은 기본 패키지 매니저를 통해 간단하게 설치할 수 있다.
sudo apt-get install build-essential python3-dev
Mac OS : Apple XCode를 설치함으로써 gcc를 사용할 수 있다. 애플스토어보단 사이트를 통해 직접 다운로드받는 것을 권장한다. (탐색 오류가 발생할 수 있으며, 발생 시 필요 시간이 기하급수적으로 늘어난다.)
Windows : 사용할 CPython 프로젝트는 Python이 빌드된 것과 동일한 컴파일러로 확장 모듈(CyThon 모듈 포함)을 빌드할 것을 권장한다. 윈도우에서 Python 사용 시 컴파일러는 일반적으로 Microsoft Visual C/C++(MSVC)이 사용될 것이며, Python에서 사용하는 MSVC의 상세한 내용 및 특정 버전 내용은 WindowsCompilers 이곳을 참고하면 된다.
MSVC대신 윈도우용 gcc인 MinGW로도 사용이 가능하다.
- Windows 오류 발생 시 : setuptools이 MSVC를 감지하지 못할 경우 PyMSVC에서 해결할 수 있다.
gcc를 설치함으로써 사전 준비는 끝났다. Cython은 pip명령어를 사용하여 간단하게 설치할 수 있다.
pip install Cython
최신 Cython 릴리스는 항상 Cython 공식 페이지에서 다운로드할 수 있다. tarball 또는 zip 파일의 압축을 풀고 디렉터리로 이동한 후 다음을 실행한다.
python setup.py install
일회성 빌드의 경우(예: CI/테스트용) PyPI에서 제공되는 휠 패키지 중 하나가 포함되지 않는 플랫폼에서 컴파일되지 않은(느린) 버전의 Cython을 설치하는 것이 전체 소스 빌드보다 훨씬 빠르다.
pip install Cython --install-option="--no-cython-compile"
기본 변환 #
fib.pyx
라는 파일을 작성한다.
def fib(n):
"""Print the Fibonacci series up to n."""
a, b = 0, 1
while b < n:
print b,
a, b = b, a + b
setup.py
파일을 작성한다.
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("fib.pyx"),
)
아래 커맨드를 실행한다.
$ python setup.py build_ext --inplace
아래와 같이 사용가능하다.
>>> import fib
>>> fib.fib(2000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
참고출처 #
Suggested Pages #
- 0.025 Java
- 0.025 Jython
- 0.025 자바
- 0.025 C#
- 0.025 객체 지향
- 0.025 C
- 0.025 Pyston
- 0.025 C++
- 0.025 Object-oriented
- 0.025 IronPython
- More suggestions...