这里介绍一种使用 PyInstaller 和 PyArmor 来发布加密 Python 源代码的方式,能够达到以下目的

把所有 Python 源代码打包成为可执行文件,客户不需要 Python 就可以运行
所有 Python 的源代码都经过加密
在 Python 源代码执行过程中,每一个函数执行完成之后,其代码块会重新被加密
可以设置 Python 源代码的有效期,过时之后无法在运行
可以绑定 Python 源代码到指定硬盘或者网卡
这里面是有到两个工具 PyInstaller 和 PyArmor,其中前者可以主要用于把源代码打包成为一个可执行文件,自动查找依赖的包,如果用到了图形库,例如 Tkinter, Qt, 使用这个工具可以很方便的进行打包。后者则可以加密源代码,并且把加密的代码绑定到硬盘和网卡,也可以设置有效期。

和其他打包工具一样,PyInstaller 对 Python 源代码只是简单编译成为 .pyc 文件,然后打到一个压缩包里面。虽然它提供了一个简单的加密方式[^1],但是很容易就可以使用调试器破解,真正的加密还依赖 PyArmor

PyArmor 对代码的加密分为两个层次,首先是对整个 .pyc 文件进行加密,其次是对每一个函数进行动态加密,即在函数开始调用的时候解密,执行完成之后在重新加密,这样从更高层次的确保了 Python 源代码的安全[^2]。

下面用一个具体的例子来说明如果打包发布一个脚本 hello.py

首先安装 PyInstaller 和 PyArmor

pip install pyinstaller
pip install pyarmor
然后使用 PyArmor 打包并加密脚本成为可执行文件,打包好的可执行文件放在 dist/hello 下面

pyarmor pack hello.py
运行打包好的文件

dist/hello/hello
生成一个限制使用时间并绑定到网卡的认证文件 licenses/code-01/license.lic

pyarmor licenses --expired 2019-01-01 --bind-mac 01:a2:b3:c4:d6:e6 code-01
使用新的授权文件替换默认授权文件,再次运行打包好的可执行文件

cp licenses/code-01/license.lic dist/hello
dist/hello/hello
更多功能,请访问 PyInstaller 主页 和 PyArmor 主页
原文链接:https://blog.csdn.net/weixin_43572000/java/article/details/83986683

如何打包发布加密的 Python 源代码的更多相关文章

  1. [Python] 项目打包发布

    一.setuptools - 官方文档: Building and Distributing Packages with Setuptools- 中文文档: Python包管理工具setuptools ...

  2. Python学习手册之__main__ 模块,常用第三方模块和打包发布

    在上一篇文章中,我们介绍了 Python 的 元组拆包.三元运算符和对 Python 的 else 语句进行了深入讲解,现在我们介绍 Python 的 __main__ 模块.常用第三方模块和打包发布 ...

  3. python compileall 打包发布

    Python工程的编译.合并.打包.发布   from:https://my.oschina.net/bfbd/blog/864310 确保要发布的包(demo)的根目录中有__main__.py文件 ...

  4. [转]Python依赖打包发布详细

    Python依赖打包发布详细   http://www.cnblogs.com/mywolrd/p/4756005.html 将Python脚本打包成可执行文件   Python是一个脚本语言,被解释 ...

  5. 在QT C++中调用 Python并将软件打包发布(裸机可运行)

    为了提高工作效率,需要一个可以自动生成多份相关联的word文档免去繁琐复制粘贴工作的软件.最后选定使用QT C++做界面和主要逻辑程序设计,对word的操作使用python写好对应的函数,然后在QT中 ...

  6. 在Pypi上发布自己的Python包

    使用Python编程的都知道,Python的包安装非常的方便,一般都是可以pip来安装搞定: sudo pip install <package name> pip的安装请移步:https ...

  7. 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(6)- 打包发布(PyInstaller3.3.1)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串口调试工具Jays-PyCOM诞生之打包发布. 经过上一篇软件优化之后,Jays-PyCOM已经初长成,该到了出去历练的时候了,只有经 ...

  8. (转!)Pyinstaller 打包发布经验总结

    原文地址 https://blog.csdn.net/weixin_42052836/article/details/82315118 具体的实现图待本人实现后贴上 原 Pyinstaller 打包发 ...

  9. 用Pyinstaller打包发布exe应用 (转)经测可用

    安装Pyinstaller   1 按照习惯,我们使用pip来安装模块.我们一直以来强调,要用最偷懒的方法.写代码的人尤其如此.人生苦短,你要偷懒~   0Python | 如何用pip安装模块和包 ...

随机推荐

  1. search(16)- elastic4s-内嵌文件:nested and join

    从SQL领域来的用户,对于ES的文件关系维护方式会感到很不习惯.毕竟,ES是分布式数据库只能高效处理独个扁平类型文件,无法支持关系式数据库那样的文件拼接.但是,任何数据库应用都无法避免树型文件关系,因 ...

  2. PAT-1057 Stack (树状数组 + 二分查找)

    1057. Stack Stack is one of the most fundamental data structures, which is based on the principle of ...

  3. Wilson's theorem在RSA题中运用

    引言 最近一段时间在再练习数论相关的密码学题目,自己之前对于数论掌握不是很熟练,借此机会先对数论基本的四大定理进行练习 这次的练习时基于Wilson's theorem(威尔逊定理)在RSA题目中的练 ...

  4. java方式实现希尔排序

    一.希尔排序简述和基本思想 希尔排序也称递减增量排序算法,是插入排序的一种更高效的改进版本.但是希尔排序是非稳定排序的算法.希尔排序比一般插入排序有以下几点改进: 一般插入排序每次只能将数据移动一位, ...

  5. 【朝夕技术专刊】RabbitMQ路由解析(上篇)

    欢迎大家阅读<朝夕Net社区技术专刊> 我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦! 上篇文章介绍了如 ...

  6. Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)

    671. 二叉树中第二小的节点 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值. 给出这样的 ...

  7. Java实现 LeetCode 668 乘法表中第k小的数(二分)

    668. 乘法表中第k小的数 几乎每一个人都用 乘法表.但是你能在乘法表中快速找到第k小的数字吗? 给定高度m .宽度n 的一张 m * n的乘法表,以及正整数k,你需要返回表中第k 小的数字. 例 ...

  8. Java实现 LeetCode 611 有效三角形的个数(双指针)

    611. 有效三角形的个数 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数. 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 ( ...

  9. Java实现 蓝桥杯 算法提高 快乐司机

    算法提高 快乐司机 时间限制:1.0s 内存限制:256.0MB 问题描述 "嘟嘟嘟嘟嘟嘟 喇叭响 我是汽车小司机 我是小司机 我为祖国运输忙 运输忙" 这是儿歌"快乐的 ...

  10. Java实现 基础算法 水仙花数

    public class 水仙花数 { public static void main(String[] args) { for (int i = 100; i < 1000; i++) { i ...