VS Code 仅提供终端环境,真正打包的是 PyInstaller;必须激活虚拟环境安装并运行,用 resource_path() 处理资源路径,配合 --add-data 和 --onefile 等参数正确配置才能生成可用 exe。

VS Code 本身不打包,真正干活的是 pyinstaller —— 它才是把 Python 脚本变成 Windows 可执行文件的核心工具。你只需要在 VS Code 的终端里正确调用它,其他全是配套动作。
必须先激活虚拟环境再装和运行 pyinstaller
很多“打包成功但运行报错”的问题,根源是没用对 Python 环境:
- 在 VS Code 终端里,确保已激活项目专属的
venv(比如.venv\Scripts\activate) - 然后运行
pip install pyinstaller,而不是全局安装 - 否则打包进去的是系统 Python 的包,
ModuleNotFoundError就会高频出现 - 验证方式:运行
python -c "import your_package; print('ok')",确保所有依赖都能 import 成功
pyinstaller 命令里哪些参数不能省
光写 pyinstaller --onefile main.py 很容易打包完就闪退,关键参数得按需加:
-
--onefile:打成单个 .exe,适合分发;开发调试阶段建议先不用,用默认目录模式(生成dist/main/),方便查缺了啥文件 -
--windowed或--noconsole:GUI 程序(如 Tkinter、PyQt)必须加,否则弹黑框;但加了之后print不输出,调试时先去掉 -
--icon=app.ico:图标路径是相对于当前终端位置的,不是相对于.py文件;图标必须是.ico格式 -
--add-data "assets;assets"(Windows):非 Python 文件(图片、JSON、字体等)必须显式声明,否则运行时报“找不到文件”
打包后找不到资源文件?路径逻辑全变了
这是最常卡住人的点:开发时 open("config.json") 能跑,打包后直接崩。因为 __file__ 和工作目录都失效了。
立即学习“Python免费学习笔记(深入)”;
- 别硬写相对路径,统一用这个函数获取真实资源路径:
import sys
import os
<p>def resource_path(relative_path):
if getattr(sys, 'frozen', False):
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)</p><h1>用法</h1><p>config_path = resource_path("config.json")
with open(config_path) as f:
data = json.load(f)-
--add-data的分隔符:Windows 用分号;,macOS/Linux 用冒号: - 如果用了
--onefile,os.chdir()没意义——临时解压路径每次都不一样,改了也白改
VS Code 里怎么避免反复敲命令
配个 tasks.json 就能一键打包,比切终端快得多:
- 在项目根目录建
.vscode/tasks.json - 填入常用命令,比如带图标+隐藏控制台的:
{
"version": "2.0.0",
"tasks": [
{
"label": "build exe (windowed)",
"type": "shell",
"command": "pyinstaller --onefile --windowed --icon=logo.ico main.py",
"group": "build",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true,
"clear": true
}
}
]
}- 按
Ctrl+Shift+P→ 输入 “Tasks: Run Task” → 选对应任务即可 - 打包输出总在
dist/下,别在项目根目录翻找
真正麻烦的从来不是命令怎么敲,而是资源路径怎么写、--add-data 怎么配、sys._MEIPASS 什么时候生效——这些细节漏一个,exe 就只是个“看起来生成了”的空壳。


















