把 Python 脚本打包成 exe

PyInstaller 速查手册

把 Python 脚本打包成 exe

|--------|--------------------------------------|
| 项目 | 内容 |
| 前置要求 | 已装 Python 3.9+ ;脚本用到的库(如 pandas )已装好 |
| 耗时 | 首次约 5 分钟,之后重打包约 1 分钟 |
| 适用系统 | Windows 10 及以上 |

目录

[一、安装 PyInstaller(只装一次)](#一、安装 PyInstaller(只装一次))

[二、在 PyCharm 终端打包(推荐方式)](#二、在 PyCharm 终端打包(推荐方式))

[三、终端目录不对?用 cd 切换](#三、终端目录不对?用 cd 切换)

四、打包命令参数说明

[五、找到并使用 exe](#五、找到并使用 exe)

六、代码改了怎么重新打包

[七、常见问题 FAQ](#七、常见问题 FAQ)

附录:一页速查

一、安装 PyInstaller(只装一次)

PyInstaller 是打包工具:把你的脚本 + Python 解释器 + 所有依赖库压进一个 exe,对方电脑不装 Python 也能双击运行。

在 PyCharm 终端(见下一节怎么打开)或 cmd 里执行:

pip install pyinstaller

成功标志:最后出现 Successfully installed pyinstaller-x.x.x。

⚠️ 若提示 'pip' 不是内部或外部命令,说明 Python 没加入环境变量,先修 Python 安装。也可以改用 python -m pip install pyinstaller。

二、在 PyCharm 终端打包(推荐方式)

(一)打开 PyCharm 终端

PyCharm 窗口底部 找到「Terminal / 终端」标签,点一下就打开了(找不到的话:菜单 View → Tool Windows → Terminal)。

终端会自动定位在当前项目根目录 ,比如:

PS C:\Users\你的用户名\PyCharmMiscProject>

(二)在终端里执行打包

先确认终端已切到脚本所在文件夹(下一节讲怎么切),然后执行:

python -m PyInstaller --onefile --console --clean --name "下单计划调整工具V3-2" "V3-2-下单计划调整.py"

💡 在 PyCharm 终端里推荐用 python -m PyInstaller 而不是直接敲 pyinstaller------它保证用的是当前项目解释器 里装的 PyInstaller 和依赖库,打包出来的 exe 才不缺库。

(三)成功标志

INFO: Building EXE from EXE-00.toc completed successfully.
INFO: Build complete! The results are available in: ...dist

三、终端目录不对?用 cd 切换

现象 :PyCharm 终端打开在项目根目录(如 C:\...\PyCharmMiscProject),但脚本在子文件夹里(如 PyCharmMiscProject\下单计划调整),直接跑打包命令会报"找不到文件"。

(一)解决:cd 到脚本所在文件夹

cd 下单计划调整

cd = change directory(切换目录)。执行后再看终端提示符,路径末尾变成 \下单计划调整> 就对了。

(二)常用目录命令速记

|---------|-------------------|-----------|
| 命令 | 作用 | 例子 |
| cd 文件夹名 | 进入下一级文件夹 | cd 下单计划调整 |
| cd .. | 退回上一级 | cd .. |
| cd \ | 回到当前盘根目录 | cd \ |
| 盘符: | 切换到其他盘(先切盘符再 cd ) | D: |
| dir | 列出当前文件夹内容,确认脚本在不在 | dir |

💡 懒人技巧:在终端里输入 cd (后面带空格),把脚本所在文件夹直接拖进终端窗口 ,路径自动补全,回车即切换。

(三)为什么必须先切目录

打包命令里写的脚本文件名不带路径,终端只会在当前所在文件夹 里找它。目录不对,人就找不到。

四、打包命令参数说明

pyinstaller --onefile --console --clean --name "下单计划调整工具V3-2" "V3-2-下单计划调整.py"

|--------------|-------------------|-------------------------|
| 部分 | 含义 | 不写会怎样 |
| --onefile | 打成单个 exe ,依赖全在里面 | 生成一个文件夹,分发容易漏文件 |
| --console | 保留黑色窗口,能看到运行进度和提示 | 运行时静默,以为卡死了 |
| --clean | 打包前清掉上次缓存 | 可能把旧代码打进新 exe |
| --name "xxx" | exe 的名字 | 默认用脚本文件名 |
| "脚本.py" | 要打包的脚本,写在最后 | 文件名写错报 script not found |

五、找到并使用 exe

打包完成后,脚本文件夹里多出 3 样东西:

|----------|--------------------|----------|
| 名称 | 是什么 | 处理 |
| dist/ | 成品文件夹,exe 就在里面 | 从这里拿 exe |
| build/ | 打包临时文件 | 可整个删掉 |
| xxx.spec | 打包配置记录 | 留着即可 |

怎么用

  1. 把 exe 和它需要的源表文件放在同一个文件夹 (本例脚本按文件名关键词找文件,文件名别改掉关键词,如"物料下单计划明细"、"采购分配")
  2. 双击 exe,黑窗口显示进度
  3. 跑完后结果文件生成在同一文件夹(本例是 调整-V1-xxx.xlsx),按回车关窗口

发给别人:只发 exe 一个文件即可,对方需为 Windows 系统。

六、代码改了怎么重新打包

改了 .py 后,exe 里仍是旧版本。重新打包只需两步:

  1. 在 PyCharm 里保存修改(Ctrl + S)
  2. 在终端里原样再跑一遍打包命令 (有 --clean 不怕缓存),新 exe 自动覆盖 dist 里的旧的

七、常见问题 FAQ

FAQ-1:exe 被杀毒软件报毒/删除

PyInstaller 的已知误报,exe 本身没问题。在杀毒软件里加入信任/白名单即可。

FAQ-2:双击 exe 后黑窗一闪就没

脚本启动即报错。排查:Win + R → cmd,把 exe 拖进窗口回车运行,窗口不关,能看到报错。

FAQ-3:报错 ModuleNotFoundError: No module named 'xxx'

打包时用的环境里没装这个库。先 pip install 库名,再重新打包。

FAQ-4:命令报错 'pyinstaller' 不是内部或外部命令

改用 python -m PyInstaller ...(前面加 python -m),效果一样。

FAQ-5:想换 exe 图标

pyinstaller --onefile --console --clean --icon="图标.ico" --name "新名字" "脚本.py"

图标必须是 .ico 格式。

附录:一页速查

0. PyCharm 底部打开 Terminal,cd 到脚本所在文件夹

cd 下单计划调整

1. 首次使用,装工具(只装一次)

python -m pip install pyinstaller

2. 打包(代码改了就重跑这条)

python -m PyInstaller --onefile --console --clean --name "exe名字" "脚本文件.py"

3. 成品在 dist 文件夹;build 可删,.spec 留着

相关推荐
锋行天下3 小时前
langgraph 后端发自定义数据,前端接收方法概括
人工智能·python
benchmark_cc4 小时前
用 QuantDash 读取单只股票五档盘口:抽样、缺失值检查与复现记录
python·数据分析·pandas·量化交易·股票数据·quantdash
曲径海盗5 小时前
【Python 学习第 55 天】列表基础
python·学习笔记·编程入门
专注仿真5 小时前
知识问答模型用到的算法集详解及代码实例
python·算法·代码·大模型训练·控制算法
jyOverQ5 小时前
我写了一个 CSDN Markdown 图片助手:告别本地图片逐张上传
python·工具·csdn
刘马想放假9 小时前
CANviz 使用指南|Linux 安装、DBC 解码、实时曲线与 J1939 实战
linux·python·websocket
2601_967987379 小时前
python判断变量名不要调用任何函数实现
python·函数·语法·判断·变量名
卷无止境10 小时前
SALib敏感性分析的python库学习笔记
后端·python
duansamve11 小时前
Python3+Flask+PostgreSQL18+Vue3项目生产环境用docker如何部署?
python·docker·flask
特立独行的猫A11 小时前
少 3 个环节、少 1 次 ABI、少 3500 行代码:cj-tauri 与 Ionic/Capacitor 的鸿蒙桥接机制对比
java·后端·python