手机字体下载大全免费网站,如何查询注册过的网站,广州比较有名的网站建设公司,seo营销策划文章目录 1. 引言2. py文件编译为pyd文件步骤2.1 环境准备2.2 准备setup.py文件2.3 进行编译 3. 测试代码 1. 引言
在实际的Python开发中#xff0c;为了防止Python脚本源码暴露#xff0c;常常需要对python源码文件进行加密保护#xff0c;Python的原始文件格式为.py… 文章目录 1. 引言2. py文件编译为pyd文件步骤2.1 环境准备2.2 准备setup.py文件2.3 进行编译 3. 测试代码 1. 引言
在实际的Python开发中为了防止Python脚本源码暴露常常需要对python源码文件进行加密保护Python的原始文件格式为.py可以通过编译生成 .pyc/.pyo/.pyd 等类型的文件其中.pyc/.pyo 是python字节码文件但由一些较低版本的解释器编译的字节码可以通过 uncompyle6 库进行反编译而 .pyd 是 windows 平台上的 python 动态链接库文件通常包含了编译后的二进制代码相比于 .pyc 文件更难反编译因为其中包含的是机器码而不是字节码可以被反汇编但难度大。
因此接下来我们将介绍如何将.py 文件编译为 .pyd 文件并通过相应代码演示具体过程。
2. py文件编译为pyd文件步骤
2.1 环境准备
编译为 .pyd 文件需要用到 Cython 库且由于 Cython 编译器需要使用 C/C 编译器来将 Cython 代码编译成动态链接库文件因此还需要在环境中准备 C/C 编译器。
安装 Cython通过pip install cython 即可实现安装安装 C/C 编译器Microsoft C 生成工具是 Windows 平台上常用的 C/C 编译器之一也是Visual Studio的一部分因此通常通过安装 Visual Studio 来实现安装下载地址。
2.2 准备setup.py文件
假设现有一个待加密的名为 example.py 的文件文件内容如下
import numpy as npdef cal(array_):print(Mean of array: , np.mean(array_))print(Median of array: , np.median(array_))有待加密文件后需准备 setup.py 文件文件内容如下
from distutils.core import setup
from Cython.Build import cythonizesetup(ext_modulescythonize([example.py]))其中的 distutils 是 python 的内置库将待加密文件的文件名如上所示设置即可如果有多个.py文件则将多个文件名用逗号隔开。
2.3 进行编译
打开 cmd 窗口将当前目录切换到上面提到的 example.py 和 setup.py 的所在目录执行以下命令
python setup.py build_ext --inplace运行时生成的信息说明加密完成。此时加密得到 example.cp310-win_amd64.pyd如果该文件不在当前工作目录中则到 build 文件的 lib.win-amd64-cpython-310 当中查找。这里的 310 指的是 python 版本为 3.10之所以有这个版本区别是要求调用相应 pyd 文件的环境和编译 pyd 的 python 的环境版本要一致。如果在不同环境版本之间编译和调用可以考虑用环境管理根据安装conda并搭建python环境入门教程 此时将得到的 example.cp310-win_amd64.pyd 文件中的 .cp310-win_amd64 部分删除得到 example.pyd其使用方法与普通的 py 文件一致。
3. 测试代码
上面加密的代码中定义了一个函数当传入一个数组或者列表后打印传入数据的平均值和中位数值。切换到 .pyd 所在的目录下运行如下测试代码
import exampleexample.cal([1,5,3,2,0])打印结果如下
Mean of array: 2.2
Median of array: 2.0除了后缀不同加密后的文件应该与加密前文件名保持一致否则会在引用时出错当 example.py 和 example.pyd 同在一个目录下时上述测试代码中的 import example 会优先引用 .pyd 文件。