当前位置:首页>python>Python之使用Pyarmor库对项目源码混淆加密(详细步骤)

Python之使用Pyarmor库对项目源码混淆加密(详细步骤)

  • 2026-09-08 16:26:35
Python之使用Pyarmor库对项目源码混淆加密(详细步骤)

目录

一. 背景介绍

二. Pyarmor库介绍

核心功能

典型使用场景

三. Pyarmor许可证购买

四. Pyarmor许可证激活

1.安装

2.激活

五. 使用Pyarmor对项目源码加密

1.项目源码架构

2.如何进行加密

3.加密后的使用

4.加密过程中遇到的问题 

六. 总结


一. 背景介绍

在正式开始之前先对项目背景做一个简单介绍。

首先,为什么要对项目源码进行加密;由于该项目产品本身就是一个还没量产的项目,且该工具是本地自研开发的一个功能,后期项目可能要交给下游客户使用,所以领导层决定对项目进行一些加密工作,也就是说发布工具时不要包含源码。

其实做测试开发这几年来开发的工具基本都是公司内部使用,或者分公司使用,也不涉及到保密问题,所以对于python源码加密这个领域不是非常熟悉。

需求确定以后,那么就开始寻找合适的加密工具。问了一下Deepseek将常见的几种加密方式列了一下,根据我的项目需要它主推pyinstaller和pyarmor两个库。

关于pyinstaller我之前用过一次,整体使用起来很好用,但是缺点就是打包成.exe后文件很大(需要把python安装包以及依赖的库集成进去)

所以这次我选择使用pyarmor库,因为pyarmor对源码混淆加密后仍然以.py的文件格式存在,这样就便于我后续调用。

二. Pyarmor库介绍

使用之前必须先了解pyarmor是什么?以及它的工作原理,在这一点上还是有必要花点时间的

pyarmor中文是护盾,护甲,盔甲的意思,由此可知该库的主要作用是源码的安全防护。

pyarmor Github地址:https://github.com/dashingsoft/pyarmor

以下是我总结的几点:

PyArmor 是一个用于 保护 Python 脚本 的工具,通过对 Python 代码进行混淆(Obfuscation)和加密(Encryption),防止代码被直接反编译或篡改。它常用于保护商业软件或闭源项目的知识产权。

该软件作者还是个中国人,而且此人还是pyinstaller的开发成员之一,此时不由得竖起大拇指!

此乃吾辈学习榜样啊!!哈哈

核心功能

  1. 代码混淆

    • 重命名变量、函数、类名,使代码难以阅读。

    • 打乱代码结构,删除注释和空行。

  2. 代码加密

    • 将 Python 脚本编译成加密的字节码(.pyc),运行时通过动态解密执行。

    • 加密后的脚本需要依赖 PyArmor 的运行时库(pyarmor_runtime)才能运行。

  3. 许可证控制

    • 绑定脚本到特定设备、IP 或时间限制。

    • 生成试用版或分时段授权的脚本。


典型使用场景

  • 分发商业 Python 工具但需保护源码。

  • 防止用户篡改关键逻辑(如许可证验证)。

  • 限制脚本只能在特定环境运行

这里是pyarmor官方文档中文版:https://pyarmor.readthedocs.io/zh/latest/index.html

 初次使用pyarmor多少会遇到些问题,与其浪费很多时间去解决问题,不如一开始多花几十分钟仔细阅读文档,因为官方文档能解决你遇到的90%问题。

pyarmor分为免费版和付费版,对比如下:

而且免费版对要混淆加密的代码行数也有限制,好像超过1000行时加密不了。 所以就涉及许可证购买。

不同版本许可证区别如下:

不同版本许可证的价格如下:

经过仔细分析官方文档,于我而言基础版(298元)的许可证就够用了,以下都是基于基础版许可证的操作步骤。 

三. Pyarmor许可证购买

官方文档中已经有了购买地址,为了节省大家时间,特此贴上购买链接:

 pyarmor许可证购买地址:https://pyarmor.dashingsoft.com/cart/order.html

购买成功几分钟后邮箱会收到购买成功邮件(含许可证激活码),大概下面这个样子

 邮件中也会附有许可证的激活步骤,下面来逐一介绍。

四. Pyarmor许可证激活

Pyarmor 基础版 许可证的激活步骤:Pyarmor 基础版 许可证的激活步骤:

1.安装

pip install -U pyarmor   # 在cmd中通过此命令安装pyarmor库 pyarmor -v                    #通过此命令来查看pyarmor版本号,并确认 Pyarmor 的版本大于 9.0

2.激活

首先下载邮件的附件并保存为 "pyarmor-regcode-91xx.txt";然后cmd指令进入刚才附件保存的路径,输入如下指令:

pyarmor reg -p "XXX" pyarmor-regcode-91xx.txt

注意:

1.请替换 "XXX" 为真实的产品名称或者 "non-profits" (仅当用于加密非商业化的脚本)

2.pyarmor-regcode-91xx.txt是我附件的名称,具体根据你的附件名称来

3.激活成功

激活成功之后,会在当前目录生成许可证的注册文件 "pyarmor-regfile-9166.zip" 重要说明 * 请妥善保管和备份激活文本 "pyarmor-regcode-9166.txt" ,但是不要再继续用它来注册 Pyarmor * 请妥善保管和备份注册文件 "pyarmor-regfile-9166.zip" ,Pyarmor 开发组不提供找回服务 * 使用注册文件 "pyarmor-regfile-9166.zip" 在所有构建设备上注册 Pyarmor * 请勿使用此注册文件在 Docker 容器或者 CI/CD 管线环境中

五. 使用Pyarmor对项目源码加密

1.项目源码架构

我的项目代码简化后大概是这个样子(实际上比图中复杂很多),仅供参考

my_project/ ├── library/ │   ├── testware/ │   │   ├── function1.py │   │   └── function2.py │   ├── utils/ │   │   ├── helper.py │   │   └── common.py │   └── drivers/ │       └── function01.py ├── setup/ │   ├── setup.bat │   └── requirements.txt ├── config.yaml └── README.md

2.如何进行加密

CMD进入到my_project文件夹输入如下指令:

 pyarmor gen -O dist -r -i library/

gen:是generate缩写

-O:  是Output缩写

dist:   是混淆加密后的文件存放的目标地址

-r :     是recursion的缩写,是递归的意思,用于将library中的subfolder中文件全部混淆加密

-i :     是internal缩写,会把运行辅助包保存到包目录内部

该指令运行成功后如图所示:

此时项目根目录下会生成一个名为dist的文件夹,里面存放的是加密后的libray,libray中还会生成一个pyarmor_runtime_xxxx的package,这个包就是运行辅助包

辅助包内容如下:

 此时混淆加密后的其他.py文件变成了如下内容:

由此可见所有的源码都被混淆加密成了十六进制数据,从而一定程度上隐藏的源码。

pyarmor的优点就是混淆加密后的源码仍然以原文件名,原格式存在,这样一来对于外部调用就显得非常友好!

3.加密后的使用

混淆加密后的.py文件如何使用呢?很简单,可以直接把dist 下面的 library 直接copy到项目根目录替换原有的 library 即可。

此时如果想调用执行某一个加密后的.py文件,仍然可以像原来那样调用,比如直接在cmd中输入:

python -m library.testware.xxx_testing

跟混淆加密前的调用一模一样! 是不是很惊喜?

4.加密过程中遇到的问题 

新手初次使用pyarmor难免会遇到一些问题,我也不例外;下面是我遇到过的问题:

问题1: 加密过程中报错:ERROR out of license

原因: 免费版对加密的代码行数有限制,超过1000行加密失败(我的部分.py文件中代码行数超过1000行),

解决方案:需要购买许可证(根据个人需求)

问题2:运行加密后的.py文件报错:ImportError: attempted relative import with no known parent package

原因:from .pyarmor_runtime_000000 import __pyarmor__

解决方案:不要使用 -i 或者 --prefix 去加密脚本

下面是常见问题的汇总,仔细阅读该文档能解决你90%的问题:

3.5. 错误消息 — Pyarmor 9.0.8 文档

六. 总结

总体而言pyarmor还是很好用的,对于我来说很符合我的需求,不仅对源码有一定的保护作用,还能保持原有的文件格式,而且使用起来也相对简单。要说缺点嘛? 那就是稍微进阶一点的功能就需要付费,不过也完全可以理解,毕竟知识付费的年代!

如果你也想使用pyarmor库对项目源码进行混淆加密,那么我只有一个建议:

深入阅读并理解官方文档,因为不会读文档的RD不是一位合格的RD!!!

《完》

最新文章

随机文章