ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • python code를 cython compile / deploy
    Dev Language/Python 2020. 4. 24. 22:17

    python 모듈을 간단히 개발하여, 팀 내부에 공유해야 할 일이 생겼다. 

    그 모듈내 db connection 정보가 있어서, code를 그대로 공유하게 되면 db 접속용 id, pwd도 그대로 노출되게 되었다. 

    방법을 고민했다. 

     

    • 코드 난독화
    • python compile 후 .pyc 공유
    • cython compile 후 .so 공유

     

    코드 난독화는 id, pwd 정보도 난독화 하게 되어, db connection이 제대로 이루어지지 않을거 같아서 제외했다. 

     

    python comple output 이든, cython comple ouput이든 reverse engineering(decompile) 해버리면 code는 보여지게 된다. 

    (난독화 후 compile 하는 방법도 있을 것이다. )

    그러나 결국은 reverse 하면 된다. (decompile도 결국 시간과 공수이다.)

     

    완벽한 방법은 없고, plain text로 code를 그대로 공유하는 것보다는 낫기 때문에, 어느 선에서 타협을 하기로 했다. 

    python code를 cython으로 complie 해 본적이 없어서, 이 기회에 해보기로 했다. (cython이 시간 성능이 더 낫다)

     

    python code를 cython code로 변환/compile 하는 방법은 다음과 같다. 

     

    1. setup.py

    from setuptools import setup
    from Cython.Build import cythonize
    
    setup(
        ext_module = cythonize('xxxx.py') ## target python code file
    )

     

    2. build

    $ python setup.py build_ext --inplace

     

    3. 아래 확장자의 파일이 생긴다. (linux, windows 환경에 따라 .so 대신 .pyd일 수도 있다. )

    xxx.so
    xxx.c
    ./build

     

    xxx.so 파일만 공유하면 된다. 

    사용자는 해당 파일을 import 해서 사용하면 된다. 덧붙여 import되는 module file들은 suffix가 .so, .py, .pyd이면 된다.

     

    ----

    reference url 

    1. cython build : https://ron.sh/compiling-python-code-with-cython/
    2. python module suffix order : https://www.python.org/doc/essays/packages/

    댓글

Written by Skymaker.