动态链接库,在运行时链接到调用程序。在Windows下有很多dll
后缀的文件就是动态库。pyd
是只能运行于Windows
系统上的python库,so
是只能运行于Linux
系统上的动态库。
Cython是一个编程语言,它通过类似Python的语法来编写C扩展并可以被Python调用。将 .py 编译为 .c 文件,再将 .c 文件编译为 .so(Unix) 或 .pyd(Windows),这样得到的文件更难反编译,同时带来了性能提升,缺点是兼容性稍差,对于不同版本的操作系统,可能需要重新编译, 虽然支持大多数 Python 代码,但如果一旦发现部分代码不支持,完善成本较高 。
下面以一个示例演示如何将python文件转成动态库文件,以供调用。
安装cython
pip install cython
mysum.py
:
def sum(a, b):
return a + b
在mysum.py
同目录下新建个setup.py
文件,
setup.py
:
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize('mysum.py'))
在此目录下执行以下命令:
python setup.py build_ext --inplace
得到以下目录结构:
其中的mysum.cp39-win_amd64.pyd
就是生成的动态库, 需要注意的是,使用这种方式加密后的文件使用时需要使用生成时的 Python 版本 。
仅保留mysum.cp39-win_amd64.pyd
,调用方式:
import mysum
mysum.sum(1, 2)