리버스 엔지니어링이 쉽다는 것도 찜찜하기도 하죠.
프로그램속도에 영향을 주는 코어 부분은 좀더 빨랐으면 하는 바램이 들때가 있습니다.
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 --inplacemain.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 를 대체한다기 보다는 파이썬 모듈의 속도향상과 리버스 엔지니어링 보호에 초점을 맞춰서 릴리즈용 빌드 스크립트로 사용하는게 좋겠다는 생각이 드는군요~
예제 다운로드~


python 을 좋아하는 게임 프로그래머