python打包和运行技巧

news2024/9/23 19:28:11

一、打包的几种方法

Python 有多种打包方式可用于将脚本打包成可执行文件,以便在没有 Python 解释器的环境中运行。以下是一些常见的 Python 打包方式:

  1. 使用 pyinstallerpyinstaller 是一个常用的第三方工具,可以将 Python 脚本打包成可执行文件。它可以自动检测脚本的依赖项,并将它们一起打包成一个独立的可执行文件。

  2. 使用 py2exepy2exe 是另一个常用的第三方工具,用于将 Python 脚本打包成可执行文件。它提供了简单的配置选项,可以将所有的依赖项打包到一个文件夹中,并生成一个可执行文件。

  3. 使用 cx_Freezecx_Freeze 是一个用于将 Python 脚本打包成可执行文件的第三方库。它可以将脚本及其依赖项打包成一个目录结构,并生成一个可执行文件。

  4. 使用 NuitkaNuitka 是一个用于将 Python 脚本编译成 C/C++代码的工具。它可以将脚本编译为独立的可执行文件,而不需要 Python 解释器。

  5. 使用 py2apppy2app 是用于在 Mac 上将 Python 脚本打包成可执行文件的工具。它可以将脚本及其依赖项打包成一个应用程序包。

这些工具都有各自的特点和用法,你可以根据自己的需求选择其中之一来打包你的 Python 脚本。请注意,打包过程可能会涉及到一些配置和依赖项的处理,具体使用方法请参考各个工具的官方文档。

Pyinstaller 打包

(1)先安装 pyinstaller

pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com pyinstaller

(2)再执行打包

# -w 可以隐藏控制台输出
pyinstaller --clean -w -F 文件名.py

打包后的 windows 可执行程序将会出现在当前运行程序的 dist 文件夹下。

(3)缩小体积

首先安装 pipenv

pip install pipenv

安装完成后即可创建虚拟环境并进入打包

#建立虚拟环境
pipenv install
#进入虚拟环境
pipenv shell
#安装模块
pip install 小工具.py里面用到的模块
#打包的模块也要安装
pip install pyinstaller
#开始打包
pyinstaller -Fw main.py

#退出环境
exit

#删除虚拟环境
pipenv --rm

在这里插入图片描述

发现没有用 UPX 压缩,下载 UPX 再利用 UPX 压缩,在 https://upx.github.io/里面下载自己想要的版本 。

下载下来的是一个压缩包,我们只需要解压后把里面的 upx. Exe 文件复制到 pyinstaller. Exe 同个文件夹(一般是Scripts文件夹)内即可。Pyinstaller 默认会从执行目录里搜索 upx 执行文件,如果找到 upx,会对生成的可执行文件进行压缩。

重新执行 pyinstaller 打包命令,如果像下图这样就说明使用 upx 配置成功

在这里插入图片描述

Nuitka 打包

Nuitka 是一个 Python 到 C++编译器,它通过将 Python 代码转换为 C++代码并编译成二进制可执行文件来实现性能优化,Nuitka 能够提供比原生 Python 解释器更高的性能和更好的体积。它的工作原理可以简要概括如下:

  1. 解析和转换:Nuitka 首先解析 Python 源代码,并将其转换为中间表示形式。在这个过程中,它会将 Python 的动态特性转化为静态的 C++代码。

  2. 代码优化:在转换过程中,Nuitka 会应用各种优化技术来提高生成的 C++代码的性能。这些优化包括常量折叠、代码内联、循环展开等。

  3. 生成 C++代码:一旦优化完成,Nuitka 将生成 C++代码,并将其保存到磁盘上的一个临时目录中。

  4. 编译成可执行文件:生成的 C++代码会被传递给 C++编译器,如 GCC 或 Clang,以生成最终的二进制可执行文件。在这个过程中,C++编译器会将 C++代码编译成机器码,并与必要的库连接。

Nuitka 主程序安装

使用 pip 安装 NuitkaNuitka 是一种优化的 Python 编译器,可以使用以下命令安装它:

pip install nuitka
使用 Nuitka 打包

打包过程会提示安装依赖环境,跟着提示安装即可。

# --windows-mode关闭控制台窗口;--enable-plugin=tk-inter启用tk,否则无法显示图形界面
nuitka --windows-disable-console --enable-plugin=tk-inter --output-dir=package --standalone your_script.py

Nuitka常用命令:
--windows-disable-console   #不显示控制台窗口
--windows-icon=ICON_PATH  #添加ico
--nofollow-imports  # 所有的import不编译,交给python3x.dll执行
--follow-import-to=need  #need为你需要编译成C/C++的py文件夹命名
--mingw64  #mingw(官方建议编译器)
--standalone #独立环境,这是必须的(否则拷给别人无法使用)
--windows-disable-console #没有CMD控制窗口
--output-dir=out #生成文件路径
--show-progress #显示编译的进度,很直观
--show-memory #显示内存的占用
--include-qt-plugins=sensible,styles #打包后PyQt的样式就不会变了
--plugin-enable=qt-plugins #需要加载的PyQt插件
--plugin-enable=tk-inter #打包tkinter模块的刚需
--plugin-enable=numpy #打包numpy,pandas,matplotlib模块的刚需
--plugin-enable=torch #打包pytorch的刚需
--plugin-enable=tensorflow #打包tensorflow的刚需
--windows-uac-admin=Windows #用户可以使用管理员权限来安装
--onefile  #打包成单个exe文件
Nuitka 依赖环境Winlibs_mingw的安装

打包过程需要 winlibs_mingw,它提供了 gcc 等编译打包的各种环境,如果在线下载失败,可以直接去 github 代理下载,再放到用户目录下‘C:\Users\xxx\AppData\Local\Nuitka\Nuitka‘,这边打包时依赖的是’ https://github.com/brechtsanders/winlibs_mingw/releases/download/11.3.0-14.0.3-10.0.0-msvcrt-r3/winlibs-x86_64-posix-seh-gcc-11.3.0-llvm-14.0.3-mingw-w64msvcrt-10.0.0-r3.zip '。

还有依赖 ccache,这边打包依赖的版本是’ https://github.com/ccache/ccache/releases/download/v4.6/ccache-4.6-windows-32.zip ,ccache 是一个用于缓存编译器输出的工具,可以提高编译的速度。在编译大型项目时,往往需要花费很多时间来重新编译已经编译过的文件。Ccache 通过缓存编译器输出,可以在下次编译相同文件时直接使用缓存,避免了重新编译的过程,从而节省了编译时间。

Nuitka 依赖环境Ccache

Ccache 可以作为一个编译器前端,将编译命令转发给实际的编译器。在编译时,ccache 会检查输入文件是否已经被编译过,并且缓存了编译器的输出。如果文件已经被编译过且没有发生变化,ccache 会直接使用缓存的输出,而不会调用实际的编译器。只有当文件发生了变化或者缓存已经过期时,ccache 才会调用实际的编译器重新编译文件。

使用 ccache 可以显著加快编译的速度,特别是在多次编译相同文件的情况下。它对于开发大型项目或者频繁修改代码的开发者来说特别有用。

Nuitka 依赖环境Depends

如果还需要不依赖 python 环境单独运行,还要下载’ https://dependencywalker.com/depends22_x64.zip '。

打包完成后的文件删减

.cmd 和. Build 打包后都是可以删除的。

.cmd 文件,用于在 Windows 系统上运行打包的可执行文件的一个小脚本。这个脚本负责设置必要的环境变量,并启动打包的可执行文件。

当您使用 Nuitka 打包 Python 代码时,除了生成独立的可执行文件之外,它还会为可执行文件生成一个 .cmd 文件,以便在 Windows 系统上更方便地运行该文件。

您可以通过双击或在命令提示符中运行 .cmd 文件来执行打包的可执行文件,而无需手动设置环境变量或编写额外的脚本。.cmd 文件在运行时将确保正确地设置环境,然后启动打包的可执行文件。

可能遇到的问题
Orderedset 警告
Nuitka:WARNING: Using very slow fallback for ordered sets, please install 'orderedset' PyPI package  
Nuitka:WARNING: for best Python compile time performance.

该警告信息是 Nuitka 的一个提示,它建议您安装 orderedset PyPI 包以获得最佳的 Python 编译时间性能,如果没有装 Microsoft Visual Studio,那建议警告还是不要解决了,需要安装相关环境,文件很大

orderedset是一个用于有序集合的Python库。在某些情况下,Nuitka可能会使用一个较慢的替代方法来处理有序集合,而不是使用orderedset库。这可能会导致编译时间较长。

为了解决这个问题,先安装 Microsoft Visual C++ Build Tools: https://visualstudio.microsoft.com/visual-cpp-build-tools/
安装后,请确保您已经将其添加到系统的环境变量中,以便编译器能够找到必要的文件。然后按照以下步骤安装 orderedset 库,管理员权限在命令行执行:

pip install wheel

pip install orderedset
Tk-inter 警告

Nuitka-Plugins:WARNING: Use ‘–enable-plugin=tk-inter’ for: Tkinter needs TCL included.

这个警告意味着你需要将--enable-plugin=tk-inter作为参数传递给Nuitka来启用Tkinter插件。这是因为Tkinter需要TCL库的支持。

你可以尝试使用以下命令来打包你的程序:

nuitka --enable-plugin=tk-inter your_script.py

这将启用 Tkinter 插件并打包你的程序。

如果没有装 TCL 库,则可以查看并安装 TCL 库,官网:https://www.tcl.tk/ 下载来安装,一般 python 默认有了。

import tkinter as tk

输入以下代码来打印 Tkinter 使用的 TCL 版本:

print(tk.Tcl().eval('info patchlevel'))
# 我的版本是 8.6.12

去掉 py 脚本运行时控制台窗口显示

如果你想在双击 py.pyc 文件运行时不显示控制台窗口,可以通过将文件更名为 .pyw 来实现,各种打包工具会有单独的控制台选项控制,比如 nuitka --windows-disable-console , 这边不做描述。

.pyw 文件是 Python 的无控制台窗口版本,它会在后台运行,不显示任何窗口或控制台输出。

你可以使用以下步骤将 .pyc 文件更名为 .pyw

  1. 找到要更名的 .pyc 文件,例如 script.pyc

  2. 将文件的扩展名 .pyc 更改为 .pyw,即将文件名更改为 script.pyw

  3. 双击 .pyw 文件,它将在后台运行而不显示控制台窗口。

请注意,将 .pyc 文件更名为 .pyw 只是简单地去除了控制台窗口,但并不会对代码进行任何修改或加密。任何有经验的用户仍然可以访问和修改代码。如果需要更高级的保护措施,可以考虑使用其他加密工具或将代码打包为可执行文件。

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

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

相关文章

中间件安全-CVE 复现K8sDockerJettyWebsphere漏洞复现

目录 服务攻防-中间件安全&CVE 复现&K8s&Docker&Jetty&Websphere中间件-K8s中间件-Jetty漏洞复现CVE-2021-28164-路径信息泄露漏洞CVE-2021-28169双重解码信息泄露漏洞CVE-2021-34429路径信息泄露漏洞 中间件-Docker漏洞复现守护程序 API 未经授权访问漏洞…

题目 1119: C语言训练-“水仙花数“问题1(python详解)——练气三层中期

✨博主:命运之光 🦄专栏:算法修炼之练气篇(C\C版) 🍓专栏:算法修炼之筑基篇(C\C版) 🍒专栏:算法修炼之练气篇(Python版) ✨…

微服务技术导学

文章目录 微服务结构认识微服务技术栈 微服务结构 技术: 解决异常定位: 持续集成,解决自动化的部署: 总结如下: 认识微服务 微服务演变: 技术栈 SpringCloud与SpringBoot版本对应关系

c#调用webservice 示例

一、添加webservice链接地址 链接地址如下 http://HM01:8000/sap/bc/srt/wsdl/flv_10002A111AD1/srvc_url/sap/bc/srt/scs/sap/zhrom00 2、 C#添加引用—添加服务引用(S)… 3、输入链接地址 –前往(G) 这样就引用成功了 4、调用webservice string REQNO "100220170…

OpenCV官方教程中文版 —— 直方图均衡化

OpenCV官方教程中文版 —— 直方图均衡化 前言一、原理二、 OpenCV 中的直方图均衡化三、 CLAHE 有限对比适应性直方图均衡化 前言 本小节我们要学习直方图均衡化的概念,以及如何使用它来改善图片的对比。 一、原理 想象一下如果一副图像中的大多是像素点的像素值…

竞赛 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐…

如何处理单据保存/审核时提示:“更新即时库存时,基本单位数量与辅单位数量为一正一负,即时库存更新不成功

文章目录 如何处理单据保存/审核时提示:“更新即时库存时,基本单位数量与辅单位数量为一正一负,即时库存更新不成功问题描述前提问题分析:解决方案 如何处理单据保存/审核时提示:“更新即时库存时,基本单位数量与辅单位数量为一正一负,即时库存更新不成功 问题描述…

模拟输入信号保护方法,确保数据准确性和系统稳定性

在各种电子系统中,模拟输入信号的处理和保护至关重要。 这些信号可能会受到各种干扰和噪声的影响,从而影响数据的准确性和系统的稳定性。为了应对这些问题,本文将介绍一些模拟输入信号的保护方法。 今天分享几种模拟输入信号保护电路的方法…

npm改变npm缓存路径和改变环境变量

在安装nodejs时,系统会自动安装在系统盘C, 时间久了经常会遇到C盘爆满,有时候出现红色,此时才发现很多时候是因为npm 缓存保存在C盘导致的,下面就介绍下如何改变npm缓存路径。 1、首先找到安装nodejs的路径&#xff0c…

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (一)

最近看了一个同事的几个视频。他总结的很好。在使用 LangChain 时,根据 LangChain 的官方文档 https://integrations.langchain.com/vectorstores,目前有三种方法可以进行使用:ElasticVectorSearch,ElasticsearchStore 及 Elastic…

SpringCloudAlibaba实战-快速上手

写在前面:在学习了很多理论知识后,虽然对理论知识有了个概念,但是搭建项目的配置步骤做的少,还是不熟,方便日后复习,在此记录一下。 一、创建父项目 1. 创建项目基础信息 1. 选择项目基础信息 服务器UR…

【OpenCV实现图像的几何变换】

文章目录 概要:OpenCV实现图像的几何变换、图像阈值和平滑图像变换小结 概要:OpenCV实现图像的几何变换、图像阈值和平滑图像 使用OpenCV库进行图像处理的三个重要主题:几何变换、图像阈值处理以及图像平滑。在几何变换部分,详细…

第二章 基于模型的系统工程 P1|系统建模语言SysML实用指南学习

仅供个人学习记录 基于文档与基于模型的方法对比 MBSE潜在优势 增进沟通: 团队与利益相关方共享对系统的理解从系统多个维度展示和集成视图的能力 降低开发风险: 持续需求确认与设计验证对系统开发做精确成本估计 提高质量: 更多的完整、…

超级强大!送你几款Linux 下终极SSH客户端

更多IT技术,请关注微信公众号:“运维之美” 超级强大!送你几款Linux 下终极SSH客户端 1.MobaXterm2.Xshell3.SecureCRT4.PuTTY5.FinalShell6.Termius7.WindTerm 安全外壳协议(Secure Shell,简称 SSH)是一种网络连接协议…

服务器安装宝塔面板

参考官方文档 【教程贴】如何登录您的Linux云服务器并安装宝塔面板 - Linux面板 - 宝塔面板论坛 换言之: 下载 宝塔终端 使用ssh连接远程服务器 输入命令行安装 curl -sSO http://download.bt.cn/install/install_panel.sh && bash install_panel.sh 安…

在 Python 中将 Unicode 转换为 ASCII

通过本文,我们将学习如何将 Unicode 编码为字节,了解系统编码的不同方法以及在 Python 中将 Unicode 转换为 ASCII。 在 Python 中将 Unicode 转换为 ASCII Python 3 字符串的基本问题是由字符组成的; Python 中没有字符类型,但它…

数据清洗与规范化详解

数据处理流程,也称数据处理管道,是将原始数据转化为有意义的信息和知识的一系列操作步骤。它包括数据采集、清洗、转换、分析和可视化等环节,旨在提供有用的见解和决策支持。在数据可视化中数据处理是可视化展示前非常重要的一步,…

搭建SNMP服务器

要搭建SNMP服务器,您可以按照以下步骤进行操作: 选择合适的操作系统:您可以选择在Windows、Linux或其他操作系统上搭建SNMP服务器。不同的操作系统有不同的安装和配置方法。 安装SNMP软件:根据您选择的操作系统,安装相…

AIGC扫盲和应用场景探究

什么是AIGC? AIGC(Artificial Intelligence Generated Content)是指利用人工智能技术生成内容的能力。火爆的虚拟数字人,就是AIGC的典型代表,它可以通过学习大量数据和知识,生成与人类创作相似甚至超越人类…

UG\NX二次开发 同时设置多个对象的高亮状态 UF_DISP_set_highlights

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 感谢粉丝订阅 感谢 captainliubang 订阅本专栏,非常感谢。 简介 UG\NX二次开发 同时设置多个对象的高亮状态 UF_DISP_set_highlights 效果 代码(在for循环中逐个设置多个对象…