因为项目需求,需要对python进行加密又具有可移植性,调查了很多方法,比如编译成pyc、混淆加密、使用pyinstaller打包,都很容易进行反编译,最后发现Cython。这篇文章既是帮助有相同需求的朋友也是为自己的一份笔记。
首先Cython编译的原理是先将pyx/py文件编译成.c文件,然后由C/C++编译器编译为.so文件(或Windows上的.pyd文件),众所周知C/C++的release程序是不能被反编译的。
使用Cython编码也是非常的简单:
- 编写文件 hello.pyx 或 hello.py:
def hello(): print('hello World!')
- 编写build.py:
from distutils.core import setup from Cython.Build import cythonize setup(name='Hello World app', ext_modules=cythonize('hello.pyx'))
- 编译为 .c,再进一步编译为 .so 或 .pyd:
python build.py build_ext --inplace
最终编译出来的 .so 或 .pyd里的方法是可以直接被引用的,需要注意的是在其他环境执行时需要保证python版本要不低于编译时的版本。当然也可以再使用pyinstaller再对整个项目进行打包,方便发布和部署。