-
python code를 cython compile / deployDev 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/