(python)Pyinstaller使用以及相关问题

前言

        PyInstaller 可以将 Python 程序打包为独立的可执行文件,不需要用户手动安装 Python 和相关依赖。这使得分发和部署变得更加简单,方便将 Python 程序交付给其他用户或客户。

安装

pip install pyinstaller

相关参数

  • -F--onefile:生成单个独立的可执行文件而不是一个文件夹,这对于分发和部署来说更方便。

  • -w--windowed:在 Windows 上生成一个没有控制台窗口的可执行文件,适用于 GUI 应用程序。

  • -c--console:在 Windows 上生成一个带有控制台窗口的可执行文件,适用于命令行应用程序。

  • -n NAME--name=NAME:指定生成的可执行文件的名称。

  • -i ICON--icon=ICON:指定可执行文件的图标文件。

  • --add-data "SRC;DEST":将额外的非 Python 文件(例如配置文件、数据文件等)复制到可执行文件的目录下。

  • --add-binary "SRC;DEST":将二进制文件(例如 DLL 文件)复制到可执行文件的目录下。

  • --hidden-import MODULE:手动添加导入的模块,以确保它们被正确地包含在可执行文件中。

  • --exclude MODULE:排除特定的模块以减小可执行文件的大小。

  • --upx:使用 UPX 压缩可执行文件,这可以减小文件的大小。

使用样例

简单使用
pyinstaller xxx.py

 高阶使用

pyinstaller -Fw D:\my_Script.py -i D:\my.ico --distpath D:\dist_tool --name my_Tool --upx-dir D:\dist_tool\upx-4.0.2-win64

问题和解决方法

常见问题

  1. 打包后的程序无法运行
  2. 打包后的程序体积较大
  3. 打包后的程序出现兼容性问题
  4. 打包后的程序出现运行效率等问题
  5. 打包后的程序出现安全问题

解决办法

程序闪退
  • 文件路径和相对路径:由于 PyInstaller 将所有文件打包成单个可执行文件,因此文件路径和相对路径可能会发生变化。确保你的程序中使用了相对路径或动态获取文件路径的方法,以避免在打包后无法找到文件的问题。

  • 依赖管理:PyInstaller 会尝试自动检测和打包程序所依赖的库和资源文件,但有些情况下可能会出现依赖管理的问题。确保你在打包前已经安装了所有程序所需的依赖,并且这些依赖对于 PyInstaller 是可访问的。如果遇到依赖未被正确打包或加载的问题,可以考虑手动添加依赖项。

体积过大
  • 针对该项目用到的依赖库,单独配置一套打包用的极简环境.
  • 使用--upx参数,在引进压缩工具的帮助下,减少打包程序的体积;

 特殊问题

pywin32未正确打包

问题出在pyinstaller包不能正常找到pywin32模块的位置

需要在目录 Lib\site-packages\PyInstaller\hooks手动创建添加一个文件

hook-win32api.py

 hook-win32api.py内容如下

from PyInstaller.utils.hooks import collect_submoduleshiddenimports = collect_submodules('win32com')
win系统下使用多进程 

问题出在Windows 上,如果 Python 解释器被打包成可执行文件(例如使用 PyInstaller、py2exe 等工具),子进程的启动方式会与普通的 Python 脚本运行方式稍有不同。

freeze_support() 函数的作用是检查当前脚本是否正在被打包成可执行文件,如果是,则执行一些必要的初始化操作,使子进程能够正常工作。如果没有调用 freeze_support() 函数,可能会导致子进程无法正确启动或运行。(避免子进程重复启动)

import multiprocessingdef worker():print('This is a worker process')if __name__ == '__main__':multiprocessing.freeze_support()  # 调用 freeze_support() 函数p = multiprocessing.Process(target=worker)p.start()p.join()

 

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

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

相关文章

pdf格式转换为txt格式

pdf文档转换为txt文档 首先在python3虚拟环境中安装PyPDF2 Python 3.6.8 (default, Jun 20 2023, 11:53:23) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux Type "help", "copyright", "credits" or "license" for more infor…

答案解析——C语言—第2次作业:转义字符

本次作业的链接如下:C语言—第2次作业:转义字符 1.下面哪个不是C语言内置的数据类型: C char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数 …

PNG图片导入Abaqus建模:Abaqus Image To Part 2D插件

插件介绍 Abaqus Image To Part 2D - AbyssFish 插件可将图像导入Abaqus内并通过对网格单元集进行材料指定,实现基于图像的模型部件生成。 插件支持JPEG、JPG、PNG、GIF、TIFF、BMP、PCX、ICO等多种图像格式,兼容彩图、灰度图、二值图像等类型&#x…

docker-简单说说namespace

Linux Namespace 是一种 Linux Kernel 提供的资源隔离方案。使得处于不同namespace的进程拥有独立的全局系统资源,改变一个namespace中的系统资源只会影响当前namespace里的进程,对其他namespace中的进程没有影响。 我们可以通过 ls -l /proc/$$/ns 查看…

一起学docker(六)| Dockerfile自定义镜像 + 微服务模块实战

DockerFile 是什么 Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。 构建步骤 编写Dockerfile文件docker build命令构建镜像docker run运行镜像 Dockerfile构建过程 基础知识 每个保留字指令都必须为大写字母且后面…

【操作系统习题】操作系统的引论

一、单选题 批处理系统的主要缺点是:A A、缺乏交互性 B、CPU的利用率不高 C、不具备并行性 D、内存利用率低操作系统是一组()B A、设备管理程序 B、资源管理程序 C、中端处理程序 D、文件管理程序下列选项中,不可能在用户态发生的…

5.云原生安全之ingress配置域名TLS证书

文章目录 cloudflare配置使用cloudflare托管域名获取cloudflare API Token在cloudflare中配置SSL/TLS kubesphere使用cert-manager申请cloudflare证书安装证书管理器创建Secret资源创建cluster-issuer.yaml创建cert.yaml申请证书已经查看申请状态 部署harbor并配置ingress使用证…

Alibaba Cloud Linux镜像操作系统超详细测评!兼容CentOS

Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版,针对阿里云服务器ECS做了大量深度优化,Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS,Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…

PET塑料粘接时,要求强力粘接性能,那么怎么选胶呢?

聚对苯二甲酸乙二醇酯 简称PET。 需要强力粘接塑料PET时,可以选择以下几种胶水: 1.环氧树脂胶 具有较高的强度,硬度和耐久性,能够有效地粘合PET材料。但是,对于某些特殊环境和温度条件,可能需要选择耐高…

QT_01 安装、创建项目

QT - 安装、创建项目 1. 概述 1.1 什么是QT Qt 是一个跨平台的 C图形用户界面应用程序框架。 它为应用程序开发者提供建立艺术级图形界面所需的所有功能。 它是完全面向对象的,很容易扩展,并且允许真正的组件编程。 1.2 发展史 1991 年 Qt 最早由奇…

基于Java校园考试信息系统

基于Java校园考试信息系统 需求介绍 1、用户管理:系统需要提供用户管理功能,包括学生、教师和系统管理员等角色的管理。不同角色具有不同的操作权限。 2、考试管理:系统需要支持考试的创建、发布、安排等功能。管理员可以设置考试科目、考…

数组--238.除自身以外数组的乘积/medium

238.除自身以外数组的乘积 1、题目2、题目分析3、解题步骤4、复杂度最优解代码示例5、抽象与扩展 1、题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意…

聊聊分布式会话及实现方案

鲁大猿,寻找精品资料,帮你构建Java全栈知识体系 http://www.jiagoujishu.cn 基础概念 Session Cookie 会话方案比较简单,这里我在网上找了点资料,再回顾下基础吧。 为什么要产生Session http协议本身是无状态的,客户…

数据结构——二叉树四种遍历的实现

目录 一、树的概念 1、树的定义 1)树 2)空树 3)子树 2、结点的定义 1)根结点 2)叶子结点 3)内部结点 3、结点间关系 1)孩子结点 2)父结点 3)兄弟结点 4、树…

Mybatis-plus分页插件PageHelper的两种不同使用方式

最近在写需求的过程中接触到许多的分页,但是对于不同情况下会有不同的分页方法选择,由于目前使用得比较多的是mybatis-plus里面的分页插件,因此通过本文详细了解一下pageHelper的使用。 分页最终都是在sql中通过limit完成,limit offset,pageS…

图像分割 分水岭法 watershed

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本文的C#版本请访问:图像分割 分水岭法 watershed(C#)-CSDN博客 Watershed算法是一种图像处理算…

Linux mcd命令教程:如何在MS-DOS文件系统中切换工作目录(附实例教程和注意事项)

Linux mcd命令介绍 mcd是mtools工具的指令,它用于在MS-DOS文件系统中切换工作目录。如果不加任何参数,它将显示当前所在的磁盘和工作目录。 Linux mcd命令适用的Linux版本 mcd命令在所有主流的Linux发行版中都可以使用,包括但不限于Ubuntu…

Flink 的时间属性及原理解析

Flink的API大体上可以划分为三个层次:处于最底层的ProcessFunction、中间一层的DataStream API和最上层的SQL/Table API,这三层中的每一层都非常依赖于时间属性。时间在Flink中的地位如下图所示: 时间属性是流处理中最重要的一个方面&#…

python flask图书管理系统带文档

python flask图书管理系统带文档。功能:登录,图书的增删改查,读者管理,借阅记录,有文档。 技术:python3,flask,mysql,html。 包含源码数据库文件文档。 源码下载地址: https://download.csd…

芯课堂 | MCU之TIMER精准延时

引言 华芯微特公司SWM系列单片机提供的TIMER个数和功能有些微差别,为了让您更加简单的使用这一功能,下面小编将以SWM190为例,给大家展示如何使用SWM系列产品的TIMER功能。 TIMER精准延时 一、TIMER简介 TIMER是一种定时器工具,…