python脚本打包封装为EXE文件并加密

背景说明

当你编写好一个python脚本,但不想把源码公开,那如何将脚本分享给其他人呢?
有2种办法:

  1. 封装为EXE
    将Python脚本打包成可执行文件(exe),一个常用的工具是PyInstaller。打包过程结束后,在该脚本同级的dist目录下,你会找到生成的.exe文件。对于Windows平台,默认情况下,可执行文件位于一个与你的脚本同名的子目录内。

优点:(最直白的优势就是,这样其他人直接双击执行。展开来讲,好处非常多)

  • 跨平台:
    PyInstaller支持在Windows、macOS和Linux上运行,这意味着你可以为这些操作系统构建独立的应用程序,而无需用户安装Python环境。

  • 一键部署:
    通过简单的命令行操作,PyInstaller可以将你的Python脚本及所有依赖项(包括第三方库)打包进一个可执行文件或几个捆绑在一起的文件。这样,你可以轻松地分发应用程序,用户只需点击即可运行,无需关心Python环境配置问题。

  • 包含所有依赖: PyInstaller自动检测并包含脚本所需的所有依赖库,确保了应用程序在没有安装相应库的系统上也能正常运行。

  • 优化和压缩: PyInstaller支持对最终的可执行文件进行优化和压缩,减少其体积,便于在网络上传输和存储。

  • 无安装要求: 用户不需要安装Python或任何其他依赖来运行通过PyInstaller打包的应用程序,这对于非技术用户特别友好。

  • 支持多种类型的输出: 可以生成单个文件的可执行文件,也可以生成包含多个文件(如.dll或.so库)的目录结构,适应不同的部署需求。

  • 增强的安全性: 将源代码打包成可执行文件可以在一定程度上保护你的代码免受逆向工程,尽管不是绝对安全,但提高了复制或篡改的难度。

  • 当然也有缺点容易被反编译,同样可以获取源码(不用太担心,小白肯定反编译不了。。。)

  1. 将python文件二进制pyd文件
    将Python文件加密为PYD文件实际上是指将Python代码编译为扩展模块。PYD文件是Windows平台上Python的动态链接库(DLL)文件,相当于在Unix/Linux系统中的SO文件。这种做法可以让Python代码以二进制形式存在,提高一定的反编译难度,从而达到某种程度上的“加密”效果。
    要将Python代码编译为PYD文件,通常需要使用Cython或其他类似工具。Cython允许你使用静态类型注释的Python代码,并将其编译为C代码,然后进一步编译为机器代码。

具体操作

安装PyInstaller

首先,你需要安装PyInstaller。打开命令行工具(如CMD或PowerShell),然后运行以下命令:

方法1:命令行操作:
pip install pyinstaller
方法2:pycharm操作
直接搜索,安装即可,如下图

在这里插入图片描述

打包脚本

假设你有一个名为my_script.py的Python脚本,你想将其打包成可执行文件。在命令行中,导航到该脚本所在的目录,然后运行以下命令:

方法1:命令行操作,需要进入脚本所在的目录,才可以执行。
pyinstaller --onefile my_script.py
方法2:pycharm操作
打开python脚本项目--右键打开菜单(Open in),选择打开Terminal(其实就是CMD命令窗口)--执行命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

至此就可以把脚本打包为exe,把这个文件发送分享,对方可直接运行(Windows系统)

若想在exe基础上,实现python加密,防止被反编译,还可以这样操作。

要将Python代码编译为PYD文件,通常需要使用Cython或其他类似工具。Cython允许你使用静态类型注释的Python代码,并将其编译为C代码,然后进一步编译为机器代码。下面是使用Cython的基本步骤:

安装Cython: 首先,你需要安装Cython。可以通过pip安装:

pip install cython

编写或修改Python代码: Cython可以直接编译标准的Python脚本,但如果想要获得性能提升或更有效的加密效果,建议在关键部分使用Cython的静态类型声明。

创建Cython文件: 假设你有一个名为example.py的Python脚本,你可以创建一个example.pyx文件,在其中使用Cython语法。如果原始脚本很简单,直接将内容拷贝过来可能就足够了;如果追求性能,就要适当添加类型注解。

编写setup.py文件: 你需要一个setup.py文件来指导编译过程。一个基本的例子如下:


from setuptools import setup
from Cython.Build import cythonize
setup(name='MyExtension',ext_modules=cythonize("example.pyx"),language_level=3
)

编译为PYD: 运行以下命令来编译example.pyx为example.pyd(在Windows上)或相应的动态链接库(在Unix/Linux上)。

python setup.py build_ext --inplace

原来的 引用方式改为pyd

完成以上步骤后,你将在build目录下找到编译后的PYD文件(或在Unix/Linux上的SO文件),这个文件就是你加密过的Python扩展模块,可以在Python程序中像导入普通模块一样使用它。

请注意,虽然这种方法增加了代码被阅读和理解的难度,但有经验的攻击者仍有可能通过逆向工程来分析PYD文件的内容(难度很高)。此外,使用Cython的主要目的通常是性能优化,而不是安全加密。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1421362.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【cocos creator】2.4.0 import android.support.v4.app.ActivityCompat;失败的解决方案

时间是2024年5月,某cocos creator项目用的是2.4.0编辑器。需求是获取录音权限,需要import ActivityCompat。但是失败,提示Cannot resolve symbol app。 尝试了一些方案失败之后,决定升级cocos creator编辑器版本。升级到2.4.10。…

Leetcode—100296. 两个字符串的排列差【简单】

2024每日刷题&#xff08;135&#xff09; Leetcode—100296. 两个字符串的排列差 实现代码 class Solution { public:int findPermutationDifference(string s, string t) {int maps[26];int mapt[26];for(int i 0; i < s.size(); i) {int idxs s[i] - a;int idxt t[i…

爬虫 Python将网页内容保存为PDF(url转pdf) 譬如下载某个专栏下的全部文章

我看到一个不错的教程&#xff0c;想下载教程下全部文章到本地&#xff0c;有时间看看&#xff0c;但是问了作者没有电子档&#xff0c;就想办法了。 PS: 我一天天的到底在干嘛&#xff01;唉… 需求: 爬取一个网页里全部文章且存为pdf 参考链接: 【已解决】Python将网页内容…

CAD绘制3维场景图记录

文章目录 1.给三维体每个面上不同的颜色1.1 软件设置1.2 着色面 2.在长方体上画圆柱体 1.给三维体每个面上不同的颜色 1.1 软件设置 这里必须改为真实&#xff0c;否则之后的面上色只能显示更改了线条颜色 1.2 着色面 如果你菜单栏没有显示&#xff0c;在上面小倒三角那里…

【启明智显技术分享】SSD202核心板Rootfs下如何烧录mac地址

提示&#xff1a;作为Espressif&#xff08;乐鑫科技&#xff09;大中华区合作伙伴及sigmastar&#xff08;厦门星宸&#xff09;VAD合作伙伴&#xff0c;我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考。同时也用心整理了乐鑫及星宸…

大型无人机行业应用

大型无人机行业应用&#xff0c;你了解多少&#xff1f; 今天就来给大家揭秘一下这个神秘又酷炫的领域&#xff01; 大型无人机&#xff0c;听起来就很高大上吧&#xff1f;它们不仅能在空中自由翱翔&#xff0c;还能在各行各业发挥巨大作用哦&#xff01; 在农业领域&#x…

【C++历练之路】哈希思想的应用——位图、布隆过滤器

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;我们使用hash思想学习了哈希表&#xff0c;进行了模拟实现unordered_set与unordered_map。这些都是用hash思想实现出来的数据结构&#xff0c;今天我们来学习一下hash的应用——位图、布隆过滤器。 目…

在线业务的常见全栈故障种类与定位手段

在线系统的稳定性和可靠性是企业数字化转型成功的关键。然而&#xff0c;由于云环境和系统演进的复杂性&#xff0c;故障的发生几乎不可避免。本系列文章将对在线系统可能遇到的全栈故障进行分类&#xff0c;并结合网上的案例分析&#xff0c;对比常规分析诊断手段与Originx推理…

JETBRAINS IDES 分享一个2099通用试用码!WebStorm 2024 版 ,支持一键升级

文章目录 废话不多说上教程&#xff1a;&#xff08;动画教程 图文教程&#xff09;一、动画教程激活 与 升级&#xff08;至最新版本&#xff09; 二、图文教程 &#xff08;推荐&#xff09;Stage 1.下载安装 toolbox-app&#xff08;全家桶管理工具&#xff09;Stage 2 : 下…

【网络】网络基础

目录 一、前言 1.计算机网络背景 2.认识协议 二、网络协议初识 1.OSI七层模型 2.TCP/IP五层(或四层)模型 3.网络传输基本流程 4.数据包封装和分用 5.网络中的地址管理 1.IP地址 2.MAC地址 一、前言 1.计算机网络背景 网络之前&#xff0c;我们所有在电脑上的操作都是…

IPD推行成功的核心要素(四)IPD究竟分几期做更合适?

集成产品开发 IPD体系&#xff08;Integrated Product Developm e nt&#xff09;是产品创新型企业关于产品开发&#xff08;从概念到产品开发、发布直至退市的全过程&#xff09;的一种理念与方法。IPD体系强调以市场需求作为产品开发的驱动力&#xff0c;将产品开发作为一项投…

笔记-跨域方式实现原理

websocket Websocket是HTML5的一个持久化的协议&#xff0c;它实现了浏览器与服务器的全双工通信&#xff0c;同时也是跨域的一种解决方案。WebSocket和HTTP都是应用层协议&#xff0c;都基于 TCP 协议。但是 WebSocket 是一种双向通信协议&#xff0c;在建立连接之后&#xff…

ICLR 2024落幕,一文了解ICLR + 历年(2017-2024) 论文整理(含源码!)

来源: AINLPer公众号&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2024-5-13 引言 最近这几天&#xff0c;相信大家都或多或少的刷到了ICLR 2024这个关键词。对于刚刚入门的小伙伴或对此并没有深入的理解&#xff0c;只知…

ae如何导出mp4格式?图文教程,手把手教您搞定

在创作精彩的视频内容后&#xff0c;将其成功导出为通用的MP4格式是确保作品在不同平台上流畅播放的重要一环。Adobe After Effects作为一款专业的视频后期制作工具&#xff0c;提供了丰富的功能来实现这一目标。在本文中&#xff0c;我们将通过图文教程&#xff0c;手把手地向…

云相册APP

简介 一款用于云存照片的app&#xff0c;支持批量上传和下载照片。 平台技术 Android客户端&#xff1a;Kotlin 协程 Retrofit Server服务后端&#xff1a;Java SpringBoot 部署云服务器&#xff1a;华为云耀云服务器L实例 下载网址 小鲸鱼相册 Ps: 由于网站域名备案审核…

零成本实现网站HTTPS访问的全面指南

在当今的互联网环境中&#xff0c;HTTPS已经成为网站安全的标配&#xff0c;它不仅能够保护用户数据免受监听和篡改&#xff0c;还能提升网站在搜索引擎中的排名。幸运的是&#xff0c;即使预算有限&#xff0c;通过一些免费的资源和服务&#xff0c;你同样可以为你的网站启用H…

css伪元素实现三角形箭头和空心箭头

使用css实现三角形箭头和空心箭头&#xff0c; 常用的使用场景&#xff1a;展开收起&#xff0c;下拉菜单 1.向下实心三角形&#xff1a; html <span class"arrow"></span>css .arrow {position: relative;}.arrow:after {position: absolute;top: 5…

Redis之主从复制详解

主从复制 概念 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点&#xff08;master&#xff09;&#xff0c;后者称之为从节点&#xff08;slave&#xff09;&#xff1b;数据的复制是单向的&#xff0c;只能由主节点到…

【word技巧】word文档打开之后,有些地方不能编辑,什么原因?

有些朋友打开word文档之后发现&#xff0c;文档内容中有些地方是无法编辑的&#xff0c;这是什么原因导致的&#xff1f;今天我们一起来学习一下&#xff01; 原因&#xff1a; Word文档部分内容无法编辑的原因是因为word设置了限制编辑&#xff0c;有些朋友是否会有疑问&…

图文详解:synchronized关键字 及其底层原理

目录 一.线程安全问题 二.synchronized关键字 ▐ synchronized图解 ▐ 可重入锁及图解 ▐ synchronized用于方法上 三.Java标准库中synchronized的使用 四.synchronized的底层实现原理 一.线程安全问题 线程安全是指在多线程环境下&#xff0c;对共享资源的访问不会导致…