这里介绍一种使用 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. 配置Universal Links

    参考: https://www.cnblogs.com/GJ-ios/p/9583141.html https://blog.csdn.net/saw471/article/details/10106 ...

  2. Spring Boot 教程(2) - Mybatis

    Spring Boot 教程 - Mybatis 1. 什么是Mybatis? MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 J ...

  3. 【原创】CentOS 7搭建多实例MySQL8(想要几个搞几个)

    起因 最近项目上开始重构,可能会用到主从加读写分离的情况,就想先在本地搭一个出来试试效果,结果百度一搜出来一大堆,然而自己去踩坑的没几个,绝大多数都是去抄的别人的内容,关键是实际应用中还会出错,浏览器 ...

  4. 符合PSR-0规范的自动加载

    PSR-0规范 命名空间必须与绝对路径一致 类名首字母必须大写 除去入口文件外,其他“.php”必须只有一个类 类文件必须自动载入,不采用include等 单一入口 1)目录结构 2)代码 入口文件i ...

  5. 使用容器化块存储OpenEBS在K3s中实现持久化存储

    作者简介 Giridhara Prasad,Mayadata Inc.首席工程师.在软件测试自动化.混沌工程(chaos engineering)方面有丰富的经验.目前,他正在研究开源混沌工程项目Li ...

  6. 集合框架之ArrayList -Java

    ArrayList 1.与数组的区别 如果要存放多个对象,可以使用数组,但是数组会有长度的限制,会出现不够用或者是浪费的情况. 为了解决数组的局限性引入了容器的概念,最常用的容器就是ArrayList ...

  7. 9.快照持久化和AOF持久化

    持久化功能redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会把硬盘中的数据恢复到内存(redis)的里边. 数据保存到硬盘的过程就称为“持久化”效果. re ...

  8. PreparedStatement实现针对不同表的通用查询操作

    PreparedStatement实现针对不同表的通用查询操作:查询一样和多行 PreparedStatementQueryTest package com.aff.PreparedStatement ...

  9. rpm解决Jenkins安装报错

    安装Jenkins出现的问题rpm安装新建路径存放地址mkdir /home/jenkins 下载地址https://pkg.jenkins.io/redhat-stable/jenkins-2.20 ...

  10. 04 . 前端之JQuery

    JQuery简介 # 1. jQuery是一个轻量级的.兼容多浏览器的JavaScript库.# 2. jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地 ...