pyinstaller打包python程序高级技巧
cac55 2025-08-30 00:49 3 浏览 0 评论
pyinstaller是最常用的python程序打包成可执行程序(exe)的工具,这篇文章将介绍几个pyinstaller打包可能遇到的问题及其解决方法。
安装
pyinstaller的安装很简单,直接pip安装就可以。
pip install pyinstaller
打包指令
-F | 生成一个exe程序,所有依赖项被打包进该exe程序中 |
-D | 生成一个包含exe程序的目录,所有依赖项和exe程序位于同一目录下 |
-i | 为生成的exe程序指定一个icon图标 |
-n | 指定生成的.exe和.spec文件名 |
-c | 显示命令行窗口 |
-w | 不显示命令行窗口 |
–distpath | 指定打包后的程序存放目录,默认为当前目录下的dist目录 |
–workpath | 为输出的所有临时文件指定存放目录 |
-h | 帮助信息 |
例如,打包成一个exe文件:
pyinstaller -F test.py
打包成一个exe,实际运行目录
将程序打包成一个exe文件后,每次运行时,pyinstaller会先将exe解压到一个临时目录,然后运行主文件,这个目录所在位置在
c:/users/xxxx/AppData/Local/Temp目录下,一般为_MEI开头的文件夹。
需要注意的是:
- 每次运行都需要这个解压过程,所以如果exe文件太大,解压需要消耗很长时间,所以大文件不建议打包成一个exe。
- 临时文件夹可能不会自动删除,会导致临时文件越积越多,占用磁盘空间。
多进程程序打包无法运行
如果使用到了多进程程序,打包后可能出现循环调用,无法运行程序。这时需要加入一下代码解决,并且最好写在第一行。
from multiprocessing import freeze_support
freeze_support()
打包文件太大,如何瘦身
pyinstaller需要将python环境一起打包进去,所以本身打包后的文件就会比较大,但是一些没有用到的模块很可能也被打包进去了,应该想办法将这些模块排除掉。
我们可以先选择不打包为一个exe文件(即不使用-F),然后到dist文件目录下的打包成功目录看看哪个文件或文件夹(模块)最大,分析这个文件或模块是否是必须使用的依赖,甚至可以一个一个排除测试exe是否可以正常执行。
这个时候需要手动编辑spec文件中的excludes,例如:
a = Analysis(['test.py'],
pathex=['E:\\python-workspace\\test'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=['matplotlib','PIL','cython','PyQt4','zmq'],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
找不到模块
打包过程中报错,找不到某个模块。
ModuleNotFoundError: No module named uvicorn
这时首先可以尝试在hiddenimports中引入这个模块再次打包。
a = Analysis(['test.py'],
pathex=['E:\\python-workspace\\test'],
binaries=[],
datas=[],
hiddenimports=[
'fastapi',
'uvicorn.logging'],
hookspath=[],
runtime_hooks=[],
excludes=['matplotlib','PIL','cython','PyQt4','zmq'],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
无法引入某些模块的dll
例如使用扫码组件pyzbar,打包执行时提示找不到dll,这时,可以在spec文件中的binaries手动引入。实际代码如下:
import pyzbar
import pathlib
pyzbar_dir = pathlib.Path(pyzbar.__file__).parent
pyzbar_dlls = [(str(dll), '.') for dll in pyzbar_dir.glob('*.dll')]
dlls = pyzbar_dlls
a = Analysis(['test.py'],
pathex=['E:\\python-workspace\\test'],
binaries=dlls,
...
)
其他资源文件打包
如果需要打包配置文件或者图片资源,可以在spec文件中的datas手动引入。例如打包config文件夹下所有内容:
a = Analysis(['test.py'],
pathex=['E:\\python-workspace\\test'],
binaries=[],
datas=[('config\\','config')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
打包后的可执行文件无法在别人电脑运行
程序在自己电脑运行正常,但是在别人电脑上直接弹出错误,而且没有具体报错。这很可能是缺少了一些必要的系统dll。因为很多python模块还需要vcruntime等dll,如果自己的开发电脑已经安装vc运行环境而别人的电脑没有安装,程序就无法运行。
我们可以使用
https://github.com/lucasg/Dependencies这个开源项目提供的工具来查看exe文件依赖的dll,然后看我们打包程序中是否缺少某些必要依赖,如果缺少dll,则可以通过上述的binaries或datas中手动引入的方式打包dll。
例如缺少vcruntime140相关dll:
a = Analysis(['test.py'],
pathex=['E:\\python-workspace\\test'],
binaries=[],
datas=[('C:\\Windows\\System32\\vcomp140.dll','.'),('C:\\Windows\\System32\\vcruntime140_1.dll','.')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
相关推荐
- 将100个EXCEL工作表建立目录索引,同事用1小时,我用1分钟
-
EXCEL工作簿中的工作表多了,查找某个工作表就比较麻烦,可以用建立目录索引的方式来实现快速定位到指定的工作表。目录索引如何建立呢?相信插入链接的操作好多人都会,但是如果工作表太多了,用这种方法操作时...
- 在工作中用word文档做目录常见的几种方式
-
制作Word文档目录时,常见的三大方法分别是使用内置标题样式生成目录、使用大纲视图生成目录以及手动创建目录。以下是每种方法的详细步骤,帮助你轻松掌握目录制作的技巧。一、使用内置标题样式生成目录设置标题...
- 1分钟批量生成100个文件夹_1分钟批量生成100个文件夹
-
1分钟批量生成100个文件夹。大家好,现在来学习一下利用Excel一分钟之内以指定的名称创建100个文件夹如何操作?现在来进行实操一下。现在现有的数据有编号和姓名,名字是100个,这是以这100个名字...
- 如何生成文件目录——《超级处理器》应用
-
如果我们有很多文件,查看起来很不方便,怎么办?我们可以将所有文件,生成一个文件目录,这样想看哪个文件,直接点击目录中对应的文件名就可以打开了。我们以下面文件为例,做一个文件目录(不限于Excel...
- 表格技巧—用Excel生成文件夹目录的方法
-
在日常工作中,有时候我们需要生成很多的文件夹、报表文件,需要生成很多的工作表单。这些事情如果手动来做太费时费力了,那么在Excel里怎么生成文件夹目录呢?Excel文件夹生成目录有两种方法,现在我们就...
- 拒绝手动更新!3步制作Excel自动更新智能目录,效率飙升300%
-
作为专注Excel技巧分享的博主,我太清楚大家在处理长文档时的痛苦了。上周粉丝群里有位宝妈哭诉:她花3小时整理的200页产品目录,因为新增了10款产品,目录页码全乱套!这种经历我太有共鸣了,今天就教大...
- 如何自动生成目录???_文档如何自动生成目录
-
第一步:先拟标题,一级标题完成后可以开始二级标题的撰写;第二步,打开【视图】中的导航窗格;第三步,打开【引用】中的【目录】,选择合适的级别目录...
- 目录页码不用手动输,自动生成超简单
-
写长文档时,手动标目录页码不仅麻烦,改内容后还容易出错。其实不管用Word还是WPS,都能自动生成带页码的目录,几分钟就能搞定。下面用简单的步骤教你操作,小白也能轻松学会。先说说Word里的...
- PPT自动生成目录,3步告别手工整理,效率提升80%
-
你知道吗?据统计,职场人士平均每周要制作2.3份PPT,其中30%的时间都耗在了手动整理目录上。看着密密麻麻的页面,一个个复制标题、调整格式、对齐页码,这种重复劳动不仅费时费力,还容易出错。今天教你3...
- Word怎么制作目录?用这3种方法,10秒搞定!
-
你好,我是小智。Word制作目录是一项核心功能,这是每个使用Word的人,必须要掌握的一项技巧。如果你还不会这项技巧,那今天我来给你详细的讲一下,Word制作目录的方法,喜欢记得点赞收藏哦^_^1、...
- Excel制作自动更新的目录,2个公式搞定!
-
如果我们的Excel工作簿里面,表格太多,不好管理,可以花1分钟时间,快速制作一个工作簿目录,快速实现跳转,效果如下所示:以上制作过程,仅用到了2个函数公式,分别是SHEETSNAME和HYPERLI...
- Excel制作目录的6种方法,到底哪种才是你的菜?
-
【温馨提示】亲爱的朋友,阅读之前请您点击【关注】,您的支持将是我最大的动力!在日常工作中,一个Excel文件中往往会创建多个工作表,但要找到需要的工作表,有时会一个个点击工作表标签,要是能生成一个目录...
- Excel目录完美的制作方法,新增表格自动更新,还不限制版本
-
制作可以自动更新的工作表目录,最简单的方法就是利用PowerQuery来获取工作表名称,但是有很多粉丝反映它们的Excel版本不支持,无法使用,今天就跟大家分享另一种解决方法,不限制Excel版本,就...
- 一键生成Excel目录,自动跳转到需要的工作表,小白也能轻松掌握
-
如果一个Excel文件中有非常多的工作表。你会使用什么方法来快速跳转到需要的工作表呢?相信很多人都会选择制作一个工作表目录。但是制作工作表目录对于新手来说还是比较复杂的,今天跟大家分享一种方法,只需要...
- Excel还能做表格目录,一键生成_excel工作表目录生成
-
私信回复关键词【CSV】,获取CSV工具,帮你批量转换上百个Excel文件格式!说起表格目录,脑海中蹦出来的第一个词就是「超链接」!我们只需要右键—【链接】—【本文档中的位置】,选择对应的工作表就可...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)