'cython'에 해당되는 글 1건

  1. 컴파일되는 파이썬 cython (2) 2010/01/03

컴파일되는 파이썬 cython

Posted at 2010/01/03 13:24// Posted in python/pyutils
파이썬을 쓰다보면 c/c++ 의 정적 타이핑이 그리워질때가 있습니다.
리버스 엔지니어링이 쉽다는 것도 찜찜하기도 하죠.
프로그램속도에 영향을 주는 코어 부분은 좀더 빨랐으면 하는 바램이 들때가 있습니다.

cython(http://www.cython.org/)은 바로 이런 바램들을 들어주는 도구입니다.
확장된 python 문법을 사용해서 c 언어로 생성해 컴파일해서 사용할 수 있게
만들어주는 멋진 도구입니다.

distutils 를 활용하면 바로 파이썬 모듈로 뽑아낼수도 있죠 : )

모듈 스크립트 main.py

def main():
print "test -_-)/"


빌드 스크립트 _build_main.py

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules = [Extension("main", ["main.py"])]

setup(
name = 'test',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules
)


위처럼 작성하고 커맨드 라인 명령을 내리면
> python _build_main.py build_ext --inplace
main.pyd 가 생성됩니다.
(빌드시 문제가 생긴다면 여기 참고하세요~ )

테스트 스크립트 test.py

from main import main
main()


C:\WINDOWS\system32\cmd.exe /c test.py
test -_-)/
Hit any key to close this window...

python 의 c/c++ 언어 연동하는 대표적인 방법에는
ctypes, swig, cython 등의 3가지 방법이 있는데...

ctypes 는 간단히 dll 을 랩핑한 도구를 만들때 사용하면 좋습니다.

swig  는 c/c++ 헤더를 사용해 랩핑 코드를 만들기 때문에 헤더만 잘 만들면 외부 모듈 사용하기가 매우 쉽습니다. 생성되는 파이썬 코드를 체크하면서 튜닝을 할 수 있다는 장점이 있습니다.

cython 은 swig 영역과 조금 겹치는 것 같기도 한데... swig 를 대체한다기 보다는 파이썬 모듈의 속도향상과 리버스 엔지니어링 보호에 초점을 맞춰서 릴리즈용 빌드 스크립트로 사용하는게 좋겠다는 생각이 드는군요~

예제 다운로드~



이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/01/03 13:24 2010/01/03 13:24