脚本专家 发表于 7 天前

PyArmor 实战:Python 脚本加密与授权控制全流程

Python 脚本分发时,直接发布源码容易泄露逻辑。PyArmor 是一个命令行加密工具,能对 .py 文件进行混淆与加密,支持设置有效期、绑定机器硬件,甚至打包成独立可执行文件。下面从安装到高级用法完整走一遍。

1. 安装 PyArmor
通过 pip 完成,升级也只需一条命令。


pip install pyarmor
# 如需升级
pip install --upgrade pyarmor

安装后执行 pyarmor --version 验证是否成功。

2. 加密单个脚本
假设要加密 foo.py,v8+ 版本推荐用 gen 命令。旧版本也可用 obfuscate。


pyarmor gen foo.py
# 旧版本:pyarmor obfuscate foo.py

执行后,dist 目录会生成加密后的 foo.py 以及一个运行时辅助包(如 pyarmor_runtime_000000)。用户拿到完整的 dist 目录即可运行,因为加密脚本依赖运行时环境。

3. 添加有效期
控制试用版过期时间,支持天数或具体日期。


# 30天后过期
pyarmor gen -e 30 foo.py

# 指定具体日期(UTC 时间)
pyarmor gen -e 2026-12-31 foo.py

默认检查系统本地时间,用户可能修改系统时间绕过。可配置从 NTP 服务器获取时间,增强安全性。


pyarmor cfg nts=pool.ntp.org
pyarmor gen -e 30 foo.py

4. 绑定硬件信息
让脚本只能在指定机器上运行。第一步:在客户机器上获取硬件特征。


# v8.4.6 及以后
python -m pyarmor.cli.hdinfo
# 旧版本
pyarmor hdinfo

得到 MAC 地址或硬盘序列号后,加密时绑定。


# 绑定单个 MAC
pyarmor gen -b "00:16:3e:35:19:3d" foo.py
# 绑定硬盘序列号
pyarmor gen -b "HXS2000CN2A" foo.py
# 绑定多个 MAC
pyarmor gen --bind 66:77:88:9a:cc:fa,f8:ff:c2:27:00:7f foo.py

多次使用 -b 可绑定多个设备。

5. 增强型加密选项
以下参数需注意授权版本。


--enable-jit    # 启用动态指令生成
--mix-str       # 加密字符串常量(需正版授权)
--assert-call   # 防止函数被替换
# 组合使用示例
pyarmor gen --enable-jit --mix-str --assert-call foo.py

6. 打包成独立可执行文件
将加密脚本与 Python 运行时打包,用户无需安装 Python。


# 单文件
pyarmor gen --pack onefile -O dist_onefile main.py
# 目录形式
pyarmor gen --pack onedir -O dist_onedir main.py

注意:非 .py 文件(如资源文件)需手动复制到输出目录。

7. 加密完整项目
对包/目录递归加密,保留结构。


pyarmor gen -r -O dist_output src/mypackage
--exclude 可排除某些目录或文件

8. 跨平台支持
生成多平台运行时库,但会增加打包体积。


pyarmor gen --platform windows.x86_64,linux.x86_64 your_script.py

9. 实用命令速查
- -O, --output:指定输出目录,默认 dist。
- -r, --recursive:递归加密目录下所有 .py 文件。
- --exclude:排除指定目录/文件。
- -d, --debug:调试模式,输出详细错误。
- -h, --help:查看命令用法(如 pyarmor gen -h)。

注意:不同版本命令和选项可能存在差异,遇到问题先用 -h 查看当前版本帮助。

10. 发布结构示例
加密后的发布目录应包含运行时辅助包:


dist/
├── foo.py
└── pyarmor_runtime_000000/
    ├── __init__.py
    └── pyarmor_runtime.so

若使用 --pack 打包为单文件/目录,则运行时已内嵌,用户直接运行可执行文件即可。

通过上述步骤,你可以在不泄露原始 Python 代码的前提下灵活控制脚本的使用期限与运行环境,适合分发试用版或商业软件的 Python 组件。

热心网友2 发表于 7 天前

Re: PyArmor 实战:Python 脚本加密与授权控制全流程

感谢楼主分享这么详细的 PyArmor 实战教程!从安装、加密、有效期、硬件绑定再到打包和项目加密,整个流程非常清晰,对我们这种需要分发 Python 脚本又担心源码泄露的人来说特别实用。 有个小建议:关于时间校验绑定 NTP 的部分,如果用户环境无法访问外网,可能需要额外的配置或本地时间服务器方案,这个点可以稍微提一下。另外,`--mix-str` 这类高级加密需要正版授权,新手可能需要注意区分社区版和授权版的功能差异。 总之,楼主总结得很到位,我收藏了,以后分发脚本就参照这个流程来。

热心网友2 发表于 7 天前

Re: PyArmor 实战:Python 脚本加密与授权控制全流程

感谢楼主的详细教程,从头到尾把 PyArmor 的常见用法都覆盖了,尤其是绑定硬件和设置有效期这部分,对分发试用版特别实用。我有个小疑问:你提到的 NTP 时间校验,在用户断网或者自定义 NTP 服务器的情况下,会不会导致授权验证失败?有没有推荐的回退策略?另外,如果项目里用了非 .py 的资源文件(比如图片、配置文件),打包成独立可执行文件时除了手动复制,有没有更自动化的方式?希望听听你的经验,谢谢!

热心网友2 发表于 7 天前

Re: PyArmor 实战:Python 脚本加密与授权控制全流程

学到了,感谢楼主的详细教程!之前一直用混淆库,但功能没这么全。特别是硬件绑定和有效期控制,对分发商业项目太实用了。有个小问题想请教:如果客户机器更换了网卡,绑定MAC地址后脚本就无法运行,有没有什么容错机制?比如允许绑定多个MAC或者支持绑定硬盘序列号更稳定?
页: [1]
查看完整版本: PyArmor 实战:Python 脚本加密与授权控制全流程