Cython提高破解和反编译的门槛
Cython提高破解和反编译的门槛
文章目录
- Cython提高破解和反编译的门槛
- 一、环境配置
- 1.1 安装必须的依赖
- 1.2 安装 Microsoft C++ Build Tools
- 二、修改代码后缀
- 2.1 将你的.py文件修改为.pyx文件
- 2.2 新建入口文件
- 2.3 编写setup.py
- 2.4 编译二进制模块
- 2.5 用 PyInstaller 分别打包入口文件
- 三、清理无用文件,保留发布文件
- 四、遇到的问题与解决方法
- 4.1 缺少库
- 4.2 show_data.pyd 文件未包含进最终的 exe 文件中
一、环境配置
1.1 安装必须的依赖
pip install cython setuptools pyinstaller
1.2 安装 Microsoft C++ Build Tools
官网:https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/
点击下载生成工具即可

二、修改代码后缀
2.1 将你的.py文件修改为.pyx文件
把 read_data.py → read_data.pyx,show_data.py → show_data.pyx。
2.2 新建入口文件
注:我这里是两个文件,所以写两个入口文件
run_read.py
import asyncio
import read_dataread_data.check_port_in_use(8765)
asyncio.run(read_data.main())
run_show.py
import asyncio
import show_dataasyncio.run(show_data.main())
-
Cython 编译:read_data.pyx 和 show_data.pyx 已成功编译为 .pyd 文件(如read_data.cp312-win_amd64.pyd)。
-
PyInstaller 打包:run_read.py 和run_show.py 都已用 PyInstaller打包为单文件可执行程序(run_read.exe、run_show.exe),并且 pandas、numpy、openpyxl等依赖也已被正确打包。
2.3 编写setup.py
注:该文件用来编译二进制模块
from setuptools import setup
from Cython.Build import cythonizesetup(ext_modules=cythonize(["read_data.pyx","show_data.pyx"], compiler_directives={'language_level': "3"})
)
2.4 编译二进制模块
注:会生成 read_data.pyd 和 show_data.pyd
python setup.py build_ext --inplace
2.5 用 PyInstaller 分别打包入口文件
pyinstaller --onefile run_read.py
pyinstaller --onefile run_show.py
三、清理无用文件,保留发布文件
- 只保留 dist/ 下的 exe 和数据文件,其他都可以删除。
- 源码和 setup.py 建议自己备份,不要随发布包分发。
可以运行下面的指令,也可以手动清除,只保留 dist/ 下的 exe 和数据文件。例如,我用到了data.xlsx文件的数据,这个文件我也需要保留。
rd /s /q build
rd /s /q __pycache__
del *.c
del *.pyx
del *.py
del *.spec
del setup.py
四、遇到的问题与解决方法
4.1 缺少库
==如果有的库或者入口文件没有打包进去,可以在打包时用 --hidden-import 参数强制加入 ==
pyinstaller --onefile --hidden-import=pandas --hidden-import=numpy --hidden-import=openpyxl run_read.py
4.2 show_data.pyd 文件未包含进最终的 exe 文件中
报错如下:
ModuleNotFoundError: No module named ‘show_data’ [PYI-29448:ERROR]
Failed to execute script ‘run_show’ due to unhandled exception!。
解决方法
- 确认 show_data.pyd 文件位置
show_data.cp312-win_amd64.pyd和 run_show.py 在同一目录下,且在打包前存在。 - 用 PyInstaller 的 --add-binary 参数手动添加
show_data.pyd 在项目根目录下,打包命令如下:
pyinstaller --onefile --add-binary "show_data.cp312-win_amd64.pyd;." run_show.py
注:==;.==表示打包到 exe 的同级目录。