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_data

read_data.check_port_in_use(8765)
asyncio.run(read_data.main())

run_show.py

import asyncio
import show_data

asyncio.run(show_data.main())
  1. Cython 编译:read_data.pyx 和 show_data.pyx 已成功编译为 .pyd 文件(如read_data.cp312-win_amd64.pyd)。

  2. 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 cythonize

setup(
    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

三、清理无用文件,保留发布文件

  1. 只保留 dist/ 下的 exe 和数据文件,其他都可以删除。
  2. 源码和 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!。

解决方法

  1. 确认 show_data.pyd 文件位置
    show_data.cp312-win_amd64.pyd和 run_show.py 在同一目录下,且在打包前存在。
  2. 用 PyInstaller 的 --add-binary 参数手动添加
    show_data.pyd 在项目根目录下,打包命令如下:
pyinstaller --onefile --add-binary "show_data.cp312-win_amd64.pyd;." run_show.py

注:==;.==表示打包到 exe 的同级目录。

你可能感兴趣的:(Cython提高破解和反编译的门槛)