火柴人武林大会
156.74M · 2026-02-04
Python 作为一种动态解释型语言,虽然开发效率极高,但在商业化分发时面临着严峻的源码安全挑战。与 JavaScript 依托成熟的前端混淆生态不同,Python 原生的 .py 或 .pyc 文件极易被反编译。
要在 Windows 平台上实现安全的商业软件分发,我们需要解决以下核心痛点:
以下是本方案实施所需的基础环境与工具链:
| 框架 | 版本 | 下载文档 |
|---|---|---|
| Python | 3.8+ | www.python.org/ |
| Nuitka | Latest | nuitka.net/ |
| PyInstaller | Latest | pyinstaller.org/ |
| Distromate | 1.0.2 | distromate.net |
为了防止源码泄露,我们不直接分发 .py 或 .pyc 文件,而是使用 Nuitka 将核心业务逻辑编译为二进制扩展模块。
操作步骤:
# 安装 Nuitka
pip install nuitka
# 将 core_logic.py 编译为扩展模块 .pyd
# --module: 指示编译为模块而非 exe
# --include-package: 如果有子包需要一并编译
# --msvc=latest: 显式指定使用 MSVC 编译器(推荐)
python -m nuitka --module --output-dir=build/nuitka_output --remove-output --assume-yes-for-downloads --msvc=latest app/core/core_logic.py
core目录出现 core_logic.cp313-win_amd64.pyd,这个就是nuitka编译生成的pyd文件,可以完美替换你的core_logic.py,并且相交源代码有了很好的保护
在核心模块被 Nuitka 编译后,我们需要使用 PyInstaller 将 Python 解释器、第三方依赖(如 requests, pandas 等)以及我们生成的二进制模块打包在一起。
操作步骤:
pyi-makespec main.py
修改 Spec 配置:
打开生成的 main.spec,确保 Nuitka 生成的二进制模块被正确包含。通常 PyInstaller 会自动识别导入,但如果遇到路径问题,可以在 binaries 字段手动添加:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
['main.py'],
pathex=[],
binaries=[(r'appcorecore_logic.cp313-win_amd64.pyd', 'app/core')], # 关键位置
datas=[],
hiddenimports=['app', 'app.core', 'app.core.core_logic'],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='EncryptionDemo',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False, # 不显示控制台窗口(GUI 程序)
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='EncryptionDemo',
)
pyinstaller entry_point.spec --clean
PyInstaller 解决了“运行”问题,而 Distromate 将解决“安装”、“授权”和“更新”问题。
登录 Distromate 控制台,创建一个新应用,获取项目 ID 和密钥。
利用 Distromate 提供的集成指南,你可以将 SDK 集成提示词发送给 Claude Code、Cursor等 AI 编码工具。 ![[Pasted image 20260126200340.png]]
AI 将自动帮你完成网络请求、本地指纹获取及激活界面逻辑的代码编写,极速实现远程鉴权功能。
![[Pasted image 20260126200949.png]]
代码集成完毕并重新用 PyInstaller 打包后,使用 Distromate CLI 对生成物进行处理。它不仅会生成用户友好的安装程序(Installer),还会自动计算差异,生成增量更新包并上传至服务器。
查看 dm-out 目录,安装包已就绪,且更新包已自动部署。