========== 许可模式 ========== .. contents:: 内容 :depth: 2 :local: :backlinks: top .. highlight:: console 本文档仅适用于 `Pyarmor`_ 8.0 之后的版本。 Pyarmor 发布在 `PyPI`_ ,可以直接使用下面的命令进行安装试用:: $ pip install pyarmor $ pyarmor gen foo.py $ python dist/foo.py 试用版本永不过期,但是有功能方面的限制,这些限制可以通过不同的许可证进行解锁。Pyarmor 目前共有四种许可模式: - 基础版许可证: 主要解锁大脚本加密限制 - 专家版许可证: 提供多种不可逆的加密模式 - 集团版许可证: 满足离线加密的需要 - 管线版许可证: 专门用于 CI/CD 集成构建环境 .. list-table:: Table-1. 不同许可证的对比表 :widths: 40 12 12 12 12 12 :header-rows: 1 :stub-columns: 1 * - 功能特征 - 试用版 - 基础版 - 专家版 - 集团版 - 管线版 * - 大脚本 / 混淆字符串常量 [#]_ - - Y - Y - Y - Y * - BCC / RFT / FLY 模式 [#]_ - - - Y - Y - Y * - 离线加密 [#]_ - - - - Y - * - 最多构建设备数 [#]_ - - 100 - 100 - 200 - 0 * - 本地运行不受限制的 Docker [#]_ - - - - Y - * - 使用在 CI/CD pipeline [#]_ - Y - Y - - - Y .. rubric:: 备注 .. [#] - 大脚本文件,是指加密脚本的大小超过一定值 - 混淆字符串,是指对脚本中的字符串常量进行混淆保护的功能 .. [#] - RFT 加密模式,是指通过重命名脚本中的函数,类,方法和变量的名称来保护脚本的功能 - BCC 加密模式,是指把 Python 脚本中部分函数转换成为对应的 C 函数,通过编译直接生成机器指令代码,从而对脚本进行保护的功能 .. [#] 离线加密,是指使用 Pyarmor 加密脚本的设备可以离线加密脚本,而不需要在线验证 Pyarmor 许可证 .. [#] 最多可以安装 Pyarmor 的构建设备数目,管线许可证不可用于本地设备 .. [#] 在本地设备上面运行不受限制 Docker 容器,本地设备可以离线或者在私有网络 .. [#] 使用 Pyarmor 许可证在 CI/CD pipeline 需要额外的选项和命令 .. important:: 如果 CI/CD 管线中 runner 有自己的硬盘系统,CI 许可证可能无法工作 一般情况下,如果 runner 不是 Docker 容器,而是物理设备,直接使用专家版许可证 .. important:: 所有的 Pyarmor 许可证都是被安装在生成加密脚本的构建设备上,而不是运行加密脚本的设备上 运行加密脚本的设备不需要安装 Pyarmor,运行加密脚本的时候也不会去验证 Pyarmor 许可证 虽然加密脚本是被 Pyarmor 生成,但是生成的加密脚本完全独立于 Pyarmor 你可以像使用正常脚本一样使用加密脚本,它的行为由你而不是由 Pyarmor 来决定 如果产品使用的是 Python 2.7 和 Python 3.6 以及之前的任何版本,只能使用老版本的许可证,新版本许可证只支持 Python 3.7+ 使用条款 ======== 1. 只能自己使用 Pyarmor 只能用来加密产权属于自己的脚本,不可以任何形式去加密别人的脚本,例如在自己的程序中调用 Pyarmor 的功能去加密你的客户的脚本,或者通过网站提供基于 Pyarmor 的加密服务等等 2. 无收益无需许可 如果你的脚本不能为你带来大的收入,那么不需要购买 Pyarmor 的许可证,就可以使用 Pyarmor 试用版来加密你的脚本。但是如果你通过销售加密脚本得到收益,那么就需要购买 Pyarmor 许可证 3. 一次性收费 除了**管线版许可证**是按照年度收费外,其他所有的 Pyarmor 许可证都是一次性收费,可以在购买 Pyarmor 时候对应的版本中永久使用, **但是不保证可以在未来的 Pyarmor 版本中可以使用** 4. 一个产品一个许可证 每一个许可证都有一个 18 位字符长度唯一的编号,并授权给有且只有一种产品使用。也就是说,任何一种使用本软件进行保护的产品都有自己唯一的许可证编号,不允许两种不同产品使用相同的许可证编号。 Pyarmor 的许可策略是每一个产品都需要购买一个许可证。一个产品是指一种产品,而不是一个产品的拷贝。例如,微软的Excel是一个产品,但是却被装在无数的设备上 5. 允许合理使用 如果你为一个产品购买了许可证,但是你的另外一个产品还没有销售收入,那么在其销售收入还不大于 Pyarmor 许可证费用的 100 倍的时候,可以借用第一个产品的许可证 :term:`Pyarmor 专家版` 许可证可以少量的使用于 CI/CD 管线中,每月不超过 100 次 :term:`Pyarmor 管线版` 许可证在 CI/CD 管线中有请求速率的限制 完整使用条款请参阅 `Pyarmor 最终用户许可协议`_ .. seealso:: :doc:`how-to/register` 数据隐私 ======== 许可证编号和被授权的产品名称会嵌入到加密脚本中,除此之外,加密脚本中没有任何用户相关的注册信息,例如注册名称和邮箱等 使用基础版和专家版许可证进行加密的时候会收集设备信息并发送到服务器进行验证 在 CI/CD 环境中使用基础版和管线版许可证进行加密的时候,会收集容器相关信息以及许可证信息发送到服务器进行验证 除了许可证文件之外,不会上传任何用户脚本到服务器进行验证 技术支持 ======== 许可费用仅为解锁功能,不包含技术支持 Pyarmor 是一个命令行工具,所有的功能都通过选项实现,所有的选项都有 :doc:`完整的文档 ` 。用户需要自己学习和了解 Pyarmor 的各个选项以及使用方法,并根据自己的需求选择正确的选项,Pyarmor 开发组不会去了解用户的项目结构和加密需求,然后告诉用户需要使用什么选项 Pyarmor 提供了完备的 :doc:`在线文档系统 ` 用户通过 :doc:`常见问题的解决方案 ` 以及 :doc:`FAQs ` ,可以解决大部分使用方法上的问题 帮助命令 `pyarmor man` 可以为每一个选项提供丰富的示例,并且为常用的使用场景提供示例 Pyarmor 开发组正在开发新的教程,以动画的方式直观的帮助用户学习和使用 Pyarmor,并且快速解决使用过程中遇到的问题(大约在2024年10月能够完善) 罗马不是一天建成的,Pyarmor 开发组会根据用户反馈,持续改进学习系统,让用户可以快速有效的解决使用过程中遇到的问题 用户在Github 上的 Pyarmor 项目中报告缺陷和请求新功能,也可以通过命令 `pyarmor man` 快速提交。 邮件仅用于处理安全方面或者不适合公开的问题,其他技术问题一般不会回复 Pyarmor 开发组对提交问题的响应时间一般为 24 小时之内,节假日或者特殊情况可能会延长 Pyarmor 开发组不提供微信,电话等其他形式的技术支持 购买 ==== 在浏览器中打开 Pyarmor 官网的购物车,支持微信和支付宝 https://pyarmor.dashingsoft.com/cart/order.html 在购物车页面选择需要的许可证类型,填写注册名称,并完成支付。 支付成功之后,在一个工作日之内激活文件会发送到注册邮箱,请按照激活文件中的方法和步骤完成注册和激活,或者参考这里 :doc:`../how-to/register` 。 购买软件许可的费用是一次性收费,可以永久在购买本软件时候的版本中使用,但是许可证可能在任何一个升级版本中失效,Pyarmor 不承诺许可证可以在今后所有的升级版本中使用。 .. list-table:: 表-2. 不同授权模式的价格列表(中国) :name: 授权模式价格表1 :header-rows: 1 * - 授权模式 - 不含税价格(人民币元) - 含税价格(人民币元) - 说明 * - 基础版 - 298 - 359 - * - 专家版 - 512 - 562 - * - 集团版 - 868 - 918 - * - 管线版 - 520 / 年 - 569 / 年 - 退款条款 ======== 满足下列所有条件,可以进行退款 - 购买日期在30天之内 - 该许可激活文件还没有在命令 ``pyarmor reg`` 中使用 请直接发送退款请求到 pyarmor@163.com 附录 ==== 关于一种产品的解释和说明 ------------------------ 不用于销售的所有的 Python 脚本都属于一种特殊的产品 ``non-profits`` 一种产品在本协议中指的是独立销售的软件所有组成部分,包括开发需要的各种设备,以及提供支持的服务器,云服务器等。一种产品也包括产品的当前版本,历史版本,以及将来的升级版本。一种产品也包括基础功能相同,组合不同特殊功能而形成的不同版本的产品,这种产品的特征是不同版本对外销售名称一样,只是通过辅助名称等来进行区分。 Pyarmor 是一种产品,它所包含 - Pyarmor 基础版,专家版和集团版 都属于 Pyarmor 这一种产品 - pyarmor-webui,为 Pyarmor 提供图形界面的工具,也属于 Pyarmor 这一种产品 - Pyarmor 的后台订单系统是用 django 开发的一个程序,这也属于 Pyarmor 这一种产品 - 开发 Pyarmor 所使用的笔记本电脑,测试 Pyarmor 使用的台式机,以及运行后台订单系统的云服务器都属于 Pyarmor 这一种产品 - Pyarmor 7.x 和 Pyarmor 8.x 也都属于 Pyarmor 一种产品。 Microsoft Office 产品系列不是一种产品,它包括的各个产品,例如 Microsoft Word 和 Microsoft Excel 是功能完全不同的两个产品,所以 Microsoft Office 不是一种产品。而 Microsoft Word 是一种产品,它的各个版本系列 Micorsoft Word 2003,Word 2007 等也都属于 Microsoft word 这一种产品。 .. _select-license-type: 如何选择许可证类型 ---------------------------------- 下面列出的许可证都只能用于 Python 3.7+ .. list-table:: 表-2. 选择不同许可证类型 :widths: 40 12 12 12 12 12 :header-rows: 1 :stub-columns: 1 * - 使用条件 - 试用版 - 基础版 - 专家版 - 集团版 - 管线版 * - 在 CI/CD 中每个月运行小于 100 次 - Y - Y - Y - - Y * - 在 CI/CD 中每个月运行大于 100 次 - Y - Y - - - Y * - 需要在离线设备加密脚本 - Y - - - Y - * - 需要使用不可逆的加密模式 - - - Y - Y - Y * - 在本地 Docker 容器中使用每月不超过 100 次 - Y - Y - Y - Y - Y * - 在本地 Docker 容器中使用每月超过 100 次 - Y - Y - - Y - Y .. _how-many-licenses-required: 需要购买几个许可证 ------------------ 1. 列出所有单独销售的产品名称 - 如果该产品的销售额低于 100 x Pyarmor 许可证费用,不需要列出该产品 - 如果产品的销售额大于 100 x Pyarmor 费用的数目少于 2 个,那么只需要一个许可证即可 2. 判断多个不同产品是否同一个产品 A 和 B 是两个单独销售的产品 a. 第一种情况,满足下列条件,则可以认为 B 和 A 可以使用同一个许可证 - B 完全包含 A 的功能 - B 多于 A 的功能要和原来的 A 的功能相关 例如 Pyarmor Basic 版本 和 Pyarmor Pro 版本 可以使用同一个许可证,因为 - Pyarmor Pro 包含 Pyarmor Basic 的所有功能 - Pyarmor Pro 的额外功能是不可逆加密模式,这是对 Pyarmor Basic 加密功能的增强 b. 第二种情况,下列情况需要为 A 和 B 单独购买许可证 - B 完全包含 A 的功能 - A 的功能在 B 的功能占比很少 例如,A 是一个面部识别产品,B 是使用面部识别功能的一个考勤管理系统 c. 第三种情况,满足下列条件,则可以认为 B 和 A 可以使用同一个许可证 - B 是针对 A 产品的功能补充 例如 A 是 CAD 文件编辑器,B 是 CAD 文件转换器,用于将 CAD 文件转换成为 PDF 格式 d. 第四种情况,下列情况需要为 B 和 A 单独购买许可证 - B 和 A 的功能完全独立 例如,Micorsoft Office Suite 包括 Microsoft Word (A) 和 Micorsoft Excel (B) 3. 关于共享后台产品的选择方式 产品 A 和 B 都是独立销售的产品,共用一个后台引擎 Engineer a. 需要加密共享后台 Engineer,产品 A 和 B 的前端代码都不需要加密 - 共享后台 Engineer 购买一个许可证即可 b. 需要加密共享后台,产品 A 和 B 的前端代码也需要加密 - 前端产品 A 和 B 都需要一个许可证 - 共享后台不需要购买许可证 4. 多个不同产品需要使用一个许可证 如果从产品角度来说的两个不同产品,在开发过程中需要使用同一个许可证 - 购买多个许可证 - 为每一个产品分别注册相应的许可证 - 在加密过程中使用其中任意一个许可证 问与答 ------ **我的产品刚刚开始销售,是否可以使用 Pyarmor 试用版进行加密保护我的产品** 在销售额没有超过 Pyarmor 许可证费用的 100 倍之前,可以使用 Pyarmor 试用版进行加密保护。销售额超过之后,就需要购买 Pyarmor 许可证。 **我关注到pyarmor对授权许可产品的定义是”用于销售的产品“,即一个用于销售的产品需要购买1个许可证,那么如果我想购买pyarmor用于加密一切应用服务器上存放的python程序,这里涉及到的服务器可能有上百个,但在这种情况下我并未将pyarmor用于任何产品销售的场景,这些服务器上的脚本代码可能单纯是用于支撑某种在线服务的,比如说一个报表系统或者一个XXX管理系统,那么这种情况下我应该购买怎样的授权** 一个产品不仅仅是前端,后端也同样是属于一个产品的组成部分的。有两种购买方式, 1. 前端都不需要加密,那么所有的后端可以作为一个产品购买一个许可,即使这个后端会为多个前端提供服务 2. 前端需要加密,那就和原来的方式一样了 另外,不是所有的后端都可以作为一个产品, 例如有两个代码和功能完全不同的游戏引擎 A 和 B,分别服务不同的游戏 那么引擎 A 和 引擎 B 虽然都是后端,但是要作为两个产品 而每一个游戏引擎,虽然服务多个游戏产品,但是每一个游戏引擎可以作为一个产品 **现在假设我有4个脚本,A脚本是运维管理员用,主要用于对两个系统进行同步。B脚本用于在服务器中启动报表管理平台并获取报表管理平台的日志,C脚本用于启动财务管理平台并获取财务管理平台日志,D脚本用于动态从加密设备中调取密码供BC服务器使用,那么当我想对ABCD四个脚本都进行加密时,这会被认定为几个产品?** 简单的一个原则,如果你有单独销售的一个产品,产品销售额大于 100 倍的 Pyarmor 许可证费用,就需要购买一个许可。 这个产品用到的所有需要的后台代码,都属于这个产品。 结合 Pyarmor 的合理使用原则,对于产品销售额还没有达到 100 倍的许可证费用,可以借用其他产品的许可证。 这就是 Pyarmor 许可的原则,结合这个原则,来理解条款 **可是我的这几个脚本并不是单独销售的产品,没有直接关联的销售额,比如报表管理平台是用来周期性生成报表报送给监管机构满足监管要求的,它并不向外出售,再比如财务管理平台用来管理企业的进销存等财务信息,也并不向外出售,若干运维脚本仅仅是运维人员自行编写的、用来方便工作的,也不向外出售,那么在这种情况下,我应该如何购买许可?** 没有收益的代码和脚本都归属于一个特殊产品 non-profits,可以借用其他产品的许可证 .. include:: _common_definitions.txt