news 2026/8/1 18:51:33

python打包工具PyInstaller

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python打包工具PyInstaller

PyInstaller 是一个用于将 Python 程序打包成独立可执行文件的工具,支持 Windows、Linux 和 macOS。

1、安装PyInstaller

pipinstallpyinstaller

2、使用方法

2.1 简单应用

# 基本打包命令 pyinstaller your_script.py # 打包成单个文件 pyinstaller -F your_script.py # 打包成单个文件(不显示控制台窗口,适合GUI程序) pyinstaller -F -w your_script.py

2.2常用参数说明

参数

说明

示例

-F, --onefile

打包成单个可执行文件

pyinstaller -F app.py

-D, --onedir

打包成一个文件夹(默认)

pyinstaller -D app.py

-w, --windowed

不显示控制台窗口

pyinstaller -w app.py

-c, --console

显示控制台窗口(默认)

pyinstaller -c app.py

-n NAME, --name NAME

指定生成文件名

pyinstaller -n MyApp app.py

-i ICON, --icon ICON

设置程序图标

pyinstaller -i icon.ico app.py

--add-data SRC:DST

添加额外文件

--add-data "data/*:data"

--add-binary SRC:DST

添加二进制文件

--add-binary "lib/*:lib"

--hidden-import MODULE

添加隐藏导入的模块

--hidden-import pandas

--exclude-module MODULE

排除不需要的模块

--exclude-module matplotlib

--clean

清理临时文件

pyinstaller --clean app.py

--upx-dir DIR

指定 UPX 压缩工具目录

--upx-dir C:\upx

-y, --noconfirm

覆盖输出目录不确认

pyinstaller -y app.py

2.3简单示例

示例一:基本打包

demo.py文件内容为“print('你好')”

使用命令“pyinstaller demo.py”进行打包,打包成功会显示“successfully”。

打包后会生成build、dist文件夹,spec文件。

spec文件为配置文件,配置文件可以修改,修改会影响后续打包。

build为打包时的临时构建文件,打包后可以删除,没有影响。

dist为可执行文件所在目录,存放exe可执行文件及各种依赖文件。

将dist下整个demo文件夹复制到没有python环境的设备上也可以运行。

点击shift+鼠标右键,打开powershell窗口,运行demo.exe,结果如下:

示例二:带图标的单个可执行文件

demo.py文件同路径下放ico图片,使用命令“pyinstaller -F -i icon.ico demo.py”进行打包

打包后如下图,只有一个可执行文件。

2.4 常见问题

2.4.1添加隐藏导入

pyinstaller --hidden-import=pandas --hidden-import=numpy app.py

2.4.2排除不需要的模块

pyinstaller --exclude-module=matplotlib --exclude-module=scipy app.py

2.4.3路径处理

程序打包后,在运行时会解压到系统临时目录(如 sys._MEIPASS)。如果直接用相对路径找资源,打包后会失效打,所以需要对路径进行处理。

import sys import os def resource_path(relative_path): """获取资源文件的绝对路径""" try: # PyInstaller 打包后的程序运行时,会自动创建一个临时目录存放解压后的资源,该目录的路径会被赋值给 sys._MEIPASS # 如果能够获取到sys._MEIPASS,说明程序是打包后的可执行文件 base_path = sys._MEIPASS except AttributeError: # 若获取不到sys._MEIPASS,会触发异常,然后获取源码所在的绝对目录 base_path = os.path.abspath(".") # 拼接接待路径并返回 return os.path.join(base_path, relative_path)

3、selenium+python程序打包

selenium程序打包时需要注意driver文件。有三种方案:

方案

核心特点

适用场景

驱动打进exe内

单文件分发,无需额外文件,便携性最高

驱动版本不同需要重新打包

需离线运行、分发简单的场景

驱动放在exe外部

可灵活更换驱动版本,无需重新打包

需频繁调整驱动版本的测试场景

Selenium自动下载

无需手动管理驱动,代码最简洁

联网下载有时候不成功(目前还未解决该问题)

联网环境、Selenium ≥4.6.0 的场景

3.1将driver文件打包到程序包中

举例:打开百度网页。

baidu.py文件中的代码为:

import os import sys import time from selenium import webdriver from selenium.webdriver.chrome.service import Service def get_chromedriver_path(): # 判断是否是打包后的exe运行环境 if getattr(sys, 'frozen', False): # 打包后:exe解压的临时目录(_MEIxxxxxx) base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) else: # 开发环境:当前文件所在目录,将chromedriver.exe和baidu.py放同一个目录下了 base_path = os.path.dirname(os.path.abspath(__file__)) # 拼接驱动路径(无论哪种环境,都找 base_path 下的 chromedriver.exe) driver_path = os.path.join(base_path, "chromedriver.exe") return driver_path driver_path = get_chromedriver_path() # 初始化 driver service = Service(executable_path=driver_path) options = webdriver.ChromeOptions() driver = webdriver.Chrome(service=service, options=options) # 打开一个网站,这里以百度为例 driver.get('https://www.baidu.com') driver.maximize_window() time.sleep(5) # 最后关闭驱动 driver.quit()

在baidu.py所在目录使用命令 pyinstaller -F --add-binary "chromedriver.exe;." baidu.py 进行打包。(也可以用全路径打包pyinstaller -F --add-binary "G:\test\chromedriver.exe;." G:\test\baidu.py)

直接运行打包生成的exe文件即可。

3.2将driver文件放在打包软件的文件夹下

举例:打开百度网页。

baidu.py文件中的代码为:

def get_chromedriver_path(): if getattr(sys, 'frozen', False): # 打包后:读取 exe 所在目录的 chromedriver.exe(而非临时目录) exe_dir = os.path.dirname(sys.executable) # exe 所在文件夹路径 driver_path = os.path.join(exe_dir, "chromedriver.exe") else: # 开发环境:读取当前文件目录的驱动 driver_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "chromedriver.exe") return driver_path driver_path = get_chromedriver_path() # 初始化 driver service = Service(executable_path=driver_path) options = webdriver.ChromeOptions() driver = webdriver.Chrome(service=service, options=options) # 打开一个网站,这里以百度为例 driver.get('https://www.baidu.com') driver.maximize_window() time.sleep(5) # 最后关闭驱动 driver.quit()

在baidu.py所在目录使用命令 pyinstaller -F -w baidu.py 进行打包。(也可以用全路径打包pyinstaller -F -w G:\test\testcase\baidu.py)

将chromedriver.exe放在打包生成的exe文件同一目录下,在运行exe文件即可。

3.3自动下载驱动

当Selenium 版本 ≥4.6.0,可放弃手动管理驱动,让Selenium自动下载匹配版本的驱动。例:

import time from selenium import webdriver from selenium.webdriver.chrome.options import Options # 配置 Chrome 选项 options = Options() # 屏蔽无关日志(可选) options.add_experimental_option('excludeSwitches', ['enable-logging']) # 核心:Selenium 4.6+ 自动管理驱动,无需传 Service 和驱动路径 driver = webdriver.Chrome(options=options) driver.maximize_window() driver.get('https://www.baidu.com') time.sleep(10) driver.quit()

可使用命令 pyinstaller -F -w G:\test\testcase\baidu.py 打包。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 22:46:31

Windows系统优化革命:AtlasOS智能配置实战指南

Windows系统优化革命:AtlasOS智能配置实战指南 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atlas…

作者头像 李华
网站建设 2026/8/1 13:15:45

Ferry开源工单管理系统技术架构与部署实践

技术架构深度解析 【免费下载链接】ferry_web ferry ui展示。 项目地址: https://gitcode.com/gh_mirrors/fe/ferry_web Ferry作为企业级工单管理解决方案,采用现代化的前后端分离架构设计。前端基于Vue.js框架,结合Element UI组件库构建用户界面…

作者头像 李华
网站建设 2026/8/2 4:22:21

EmotiVoice语音个性档案系统设计构想

EmotiVoice语音个性档案系统设计构想 在虚拟助手开始陪你晨跑、数字主播24小时直播带货的今天,我们对“声音”的期待早已不再是准确读出文字那么简单。用户想要的是有温度的声音——能表达喜悦与悲伤、带着熟悉音色的“人声”,而不是千篇一律的机械朗读。…

作者头像 李华
网站建设 2026/7/31 21:02:10

ReoGrid实战手册:解锁.NET电子表格组件的核心潜能

ReoGrid实战手册:解锁.NET电子表格组件的核心潜能 【免费下载链接】ReoGrid Fast and powerful .NET spreadsheet component, support data format, freeze, outline, formula calculation, chart, script execution and etc. Compatible with Excel 2007 (.xlsx) f…

作者头像 李华
网站建设 2026/7/31 15:40:43

Windows系统标题栏美化终极指南:DWMBlurGlass完整使用教程

Windows系统标题栏美化终极指南:DWMBlurGlass完整使用教程 【免费下载链接】DWMBlurGlass Add custom effect to global system title bar, support win10 and win11. 项目地址: https://gitcode.com/gh_mirrors/dw/DWMBlurGlass 还在为Windows系统单调的标题…

作者头像 李华
网站建设 2026/8/1 17:33:23

计算机Java毕设实战-基于springboot的企业采购管理系统的设计与实现基于Java的商品货物采购管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华