由于 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 代码,但如果一旦发现部分代码不支持,完善成本较高
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。