1

由于 Python 的动态特性和开源特点,导致 Python 代码很难做到很好的加密。社区中的一些声音认为这样的限制是事实,应该通过法律手段而不是加密源码达到商业保护的目的;而还有一些声音则是不论如何都希望能有一种手段来加密。于是乎,人们想出了各种或加密、或混淆的方案,借此来达到保护源码的目的。
常见的源码保护手段有如下几种:

1.发行 .pyc 文件
2.代码混淆
3.使用 py2exe
4.使用 Cython
本文只介绍通用性最广泛的4.使用 Cython


4 使用 Cython

4.1 思路

虽说 Cython 的主要目的是带来性能的提升,但是基于它的原理:将 .py/.pyx 编译为 .c 文件,再将 .c 文件编译为 .so(Unix) 或 .pyd(Windows),其带来的另一个好处就是难以破解。

4.2 方法

使用 Cython 进行开发的步骤也不复杂。

1)编写文件 hello.pyx 或 hello.py:

def hello():

    print('hello')

2)编写 setup.py:

from distutils.core import setup

from Cython.Build import cythonize

setup(name='Hello World app',

ext\_modules=cythonize('hello.py'))

3)编译为 .c,再进一步编译为 .so 或 .pyd:

python setup.py build\_ext --inplace

然后可直接删除hello.py 和setup.py文件后依然可以直接执行
执行

python -c "from hello import hello;hello()"

即可直接引用生成的二进制文件中的hello() 函数。

4.3 优点

生成的二进制 .so 或 .pyd 文件难以破解

同时带来了性能提升

4.4 不足

兼容性稍差,对于不同版本的操作系统,可能需要重新编译

虽然支持大多数 Python 代码,但如果一旦发现部分代码不支持,完善成本较高


瑞0908
318 声望74 粉丝

一个一个解决