Python - 通过 pyInstaller 打包成可执行文件

news2024/12/25 9:03:43

一、场景

通常来说,我们开发的 python 脚本一般都会用到一些第三方的包,并且需要对应版本的 python 解释器。因此在 python 脚本在不同的主机上运行的时候相对来说不是很方便,为此可以通过 pyInstaller 将脚本和解释器打包成可执行文件(在 windows 可以打包成 exe,在 linux 下可以打包成可执行文件),让更多的人去使用它。

二、安装

2.1 pyInstaller 介绍

pyInstaller 是一个将 python 文件打包成可执行文件的库,它除了支持 windows 平台,还支持 Linux 模块。pyInstaller 会将 python 解释器、脚本中用到的第三方库函数以及相应的脚本一并打包到可执行文件中。

2.2 pyInstaller 安装

pip install pyinstaller

在 conda 中安装 pyinstaller 结果如下图所示。
在这里插入图片描述

三、打包

  1. 在 miniconda 中创建了一个名为 python39 的环境,并在环境中安装pyInstaller
    在这里插入图片描述

  2. 通过 cd 命令转移到主文件所在的项目目录中,如 cd ./Workshop\Python\es-cluseter-health-check
    在这里插入图片描述

  3. 打包项目的启动文件,我的启动文件为 main.py,因此我的命令为 Pyinstaller -F main.py,这个过程需要稍微等个一两分钟。
    在这里插入图片描述

  4. 如果没有指定目录的话,打包的程序会在当前目录中新建的 dist 中,并且项目中有文件用到了相对路径,需要把那些用到的文件再拷贝一份放到dist目录下。
    在这里插入图片描述

3.1 常用打包命令

打包可执行文件:Pyinstaller -F main.py
不带控制台的打包:Pyinstaller -F -w main.py
指定可执行文件图标打包(仅windows):Pyinstaller -F -i chinaunicom.ico main.py
指定可执行文件图标并且不带控制台的打包(仅windows):Pyinstaller -F -w -i chinaunicom.ico main.py

四、相关问题

4.1 打包成功却不能正确执行,进程无法阻塞,可执行文件一直在循环

这是因为可执行文件在调用某些模块的时候,也是进程,而在多进程中。可执行文件的主进程不会被阻塞,会一直循环起进程。可以在启动文件中,例如 main.py 中加入以下代码,要放在 import 模块之前。

from multiprocessing import freeze_support
freeze_support()

4.2 路径问题

如果在项目中有图片等资源,是需要根据程序中的相对路径复制到 dist 文件中。这里推荐使用相对路径,因为以绝对路径加载资源的方式,当可执行文件分发到其他机器上执行的时候,可能会因为目录问题导致可执行文件无法正确加载资源。

4.3 打包的启动文件问题

这里只能指定一个要打包的文件,也就是启动文件。其中启动文件中,资源加载目录不能有中文也不要有空格。并且在启动文件中不要有以下判断。

if __name__=='__main__':

如果可执行文件在其他主机上运行时弹出 找不到msvcr100.dll 时,手动将 msvcr100.dll 拷贝到 dist 目录下即可。

4.4 养成良好习惯

在项目中用什么函数导什么函数,不要 import 整个库函数,否则一个100 KB 的代码打包出来有 500 MB

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

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

相关文章

数字中国创新大赛·信创赛道优秀作品推荐 | 国产工业实时操作系统(Intewell)

产品介绍和功能体系 Intewell工业实时操作系统源于有30多年发展历史的“道”操作系统,是一款微内核实时操作系统(RTOS),具有良好的可扩展性、友好的用户开发环境和丰富的开发调试工具,提供POSIX接口。Intewell工业实时…

2023年5月产品经理认证NPDP线上班,我要报名学习

产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是…

程序设计的三种结构-C中实现其的6条语句

什么是程序设计结构? C语言设计出来就是为了解决现实中存在的问题,但是现实中问题大多较为复杂,如何描述问题也成为了一个重要的问题。将这些众多的问题核心找出来,我们发现只需要使用三种基本的结构包括:顺序结构,分…

FS4068四节锂电池充电管理控制芯片

FS4068 是一款工作于 2.7V 到 6.5V 的 PFM 升压型四节锂电池充电控制集成电路。 FS4068采用恒流和恒压模式对电池进行充电管理,内部集成有基准电压源, 电感电流检测单元,电池电压检测电路和外置场效应晶体管驱动电路等, 具有外部元…

面向开发者的 ChatGPT 提示工程

LLM 正在逐步改变人们的生活,而对于开发者,如何基于 LLM 提供的 API 接口快速、便捷地开发一些具备更强能力、集成 LLM 的应用,来便捷地实现一些更新颖、更实用的能力,是一个急需学习的重要能力。由巨佬吴恩达老师与 OpenAI 合作推…

Golang每日一练(leetDay0060) 多数元素、两数之和III

目录 169. 多数元素 Majority Element 🌟 170. 两数之和 III Two-sum-iii-data-structure-design 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏…

Zynq实现SDI视频解码PCIE传输 提供工程源码和QT上位机源码加技术支持

目录 1、前言2、我已有的SDI编解码方案3、我已有的PCIE方案4、基于zynq架构的PCIE5、总体设计思路和方案SDI摄像头Gv8601a单端转差GTX解串SDI解码VGA时序恢复YUV转RGB图像缓存PCIE发送通路SDI同步输出通路 6、vivado工程详解7、驱动安装8、QT上位机软件9、上板调试验证SDI同步H…

VMware虚拟机克隆、复制虚拟机

文章目录 为什么要克隆一、环境检查二、开始克隆三、网卡静态配置 为什么要克隆 首先VMware 上创建的虚拟机是可以重复使用的,安装好的虚拟机可以直接复制或者剪切到其它任意电脑上,然后使用 VMware 打开使用,两者的虚拟机设置以及登录密码都…

MySQL笔记(二) 数据库操纵语言DML 、数据库查询语言DQL、数据库控制语言DCL、计算字段、子查询、函数

MySQL笔记(二) 数据库操纵语言 DML插入数据 INSERT修改数据 UPDATE删除数据 DELETE 数据库查询语言DQL单表查询常用查询条件排序查询分组和分页查询限制结果 分页查询多表查询自身连接查询外连接查询嵌套查询 计算字段字段 field拼接 concatenateTrim()…

10个免费的ChatGPT镜像网站

文章目录 前言说明网站 前言 ChatGPT是一种基于OpenAI GPT(Generative Pretrained Transformer)模型的聊天机器人,它可以对用户提出的问题做出回答,同时还能够进行精准的语言理解和回复,较好地满足了人们与机器人之间…

MySQL数据库基础表格——增删改查(下)

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️树高千尺,落叶归根人生不易&…

媒体邀约服务

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体邀约是什么?专业的媒体邀约服务包含哪些内容?怎么选择合适的媒体邀约服务机构? 今天胡老师就跟大家分享下这方面你的经验。 一,媒体邀…

【C++STL】AVL树

前言 二叉搜索树是具有特殊存储结构的树,任意根节点的左子树的所有节点值都比根节点的值小,右子树的所有节点值都比根节点大。 这种特殊的存储结构使得查找的效率大大提升,为logN。但是还有缺陷。 因为二叉搜索树的构建是一个节点一个节点的…

django 过往后端搭建笔记整理 (2)--rest_framework视图使用

rest_framework视图使用 CreateAPIView---单独执行post上传逻辑views.pyuser_serializers.py CreateAPIView—单独执行post上传逻辑 基本逻辑: ① 准备视图函数类 ② 准备序列化器类 (其中可以自定义如何序列化数据、序列化哪些数据,以及如何…

苹果最近删除的照片删除怎么恢复?专业人士都这样恢复照片!

案例:苹果照片删除了怎么恢复? 【友友们,最近不小心清空了手机照片,在最近删除没有看到,有什么方法可以找回来吗?】 随着现代科技的不断发展,手机已经成为人们生活中必不可少的物品&#xff0c…

设计模式 -- 享元模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

以CSDN为例,用Charles抓浏览器接口

0 描述 很多网站,都禁止F12,这就给抓包设置了门槛,虽然解决的方法有很多,今天尝试使用工具试一试,以CSDN热榜为例,直接转python代码 1 工具下载 工欲善其事,必先利其器 这个我就不多说&#x…

MySql -- 为什么使用B+树做索引

再有人问你为什么MySQL用B树做索引,就把这篇文章发给她 本文是参考上述文章进行总结和补充,大家感兴趣也可以阅读原文. 目录 1. 索引 2. 二叉搜索树 3. 平衡二叉树 4. B树 5. B树 6.扩展 -- 聚集索引 VS 非聚集索引 1. 索引 概念:索引是一种特殊的文件&#xff…

工业4.0,无代码改变软件开发格局,数字化转型不再寸步难行

从工业1.0时代到工业4.0时代,我们已经看到了,中国在不断发展的过程中,面临着很多的挑战,企业也面临着很多的困难。在这样的大背景下,传统的开发方式已经不再适用了。很多企业开始寻求一种新的方式来开发软件&#xff0…

【场景削减】基于DBSCAN密度聚类风电-负荷确定性场景缩减方法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…