PyInstaller 3.5离线安装与打包exe实战指南

发布时间:2026/10/29 6:55:14

PyInstaller 3.5离线安装与打包exe实战指南 简介PyInstaller 3.5 源代码压缩包面向有一定基础的 Python 开发者主要解决将 Python 程序打包为无需解释器环境即可运行的独立可执行文件的问题。包内共 1307 个文件以 873 个 py 源码文件为核心辅以 122 个 txt 说明、53 个 rst 文档、25 个 C 头文件、12 个 spec 打包配置以及图标、样式等资源完整覆盖从引导加载器、依赖分析到界面配置的实现细节压缩包约 3.93MB。目前已有 2229 人学习下载。读者可借助 pyi_launch.c、pyi_pythonlib.c 等关键源码深入理解 PyInstaller 的启动与打包机制掌握通过 setup.py 完成安装的流程并参照自带 spec 与配置文件定制个性化打包方案为实际项目分发或二次开发提供直接参考。 说实话拿到这个pyinstaller-pyinstaller-v3.5.zip压缩包的第一反应是现在还在找这个版本的人多半是被旧项目或者内网环境卡住了。PyInstaller 都已经走到 5.x 了为什么还要翻出 3.5但仔细一想这个场景一点也不少见——项目锁死在 Python 3.6客户环境物理隔离只能拷贝离线包或者运维手里就存了这一个安装包。为了搞清楚这个老版本到底还靠不靠谱我特意从解压、安装到打包 exe 完整走了一遍把这条路上的坑挨个踩了一场。这篇就当给被旧版本拖住的朋友一份实操备忘录。1. 项目概述与版本定位1.1 标题拆解这个 zip 到底是什么pyinstaller-pyinstaller-v3.5.zip这个命名格式其实是 GitHub Release 的典型产物意思是 PyInstaller 项目在 v3.5 这个 tag 下打包出来的源码压缩包。拿到它通常有两种途径要么是从 PyPI 拖下来的源码包要么是从 GitHub 直接点的 Download ZIP。不管哪种你面对的都不是一个装好就能用的安装器而是一堆需要手动执行setup.py的源码文件。这类离线包在内网环境特别常见。我身边好几个朋友做工业软件、自动化脚本交付客户的办公网和产线网物理隔离没法直接执行pip install pyinstaller能递进去的就是一个 U 盘拷贝。所以学会怎么从 zip 手动安装 PyInstaller并不是没事找事而是一个真实存在的需求。如果是从 PyPI 下载的源码包文件名可能会带哈希值后缀如果是从 GitHub 下载的通常就是pyinstaller-pyinstaller-v3.5.zip这种格式。两者安装方式差别不大但 GitHub 版本会包含完整源码和测试用例解压后目录更杂乱安装前最好先理清楚目录结构。1.2 v3.5 这个版本到底适合谁先说结论如果你现在还能正常联网执行pip install pyinstaller并且项目没有被老依赖锁住直接装新版别用 3.5。3.5 的定位很明确官方支持的最高 Python 版本是 3.6Python 3.7 开始就必须换新版本。也就是说只要你的解释器还停在 Python 3.6 及以下或者某些老第三方库在新版本下行为不对3.5 就是最稳妥的选择。另一个典型场景是内网隔离。很多生产环境没有外网手里唯一的安装包就是当年下载下来的 3.5 源码 zip。这时候你没法抱怨版本老只能想办法让它在现有环境里跑起来。再加上工业、能源、医疗这类行业对软件变更非常敏感交付物一旦稳定运行没人愿意为了升级 PyInstaller 去重新做一轮回归测试。也有少数情况是老项目里用了某些动态加载的加密库或者 pywin32 的特定版本在 Python 3.6 下和 PyInstaller 3.5 配合反而最顺。这种组合比较奇怪但确实存在。如果你是这类用户老老实实复现当时的环境比盲目升级可靠得多。2. 环境准备与版本匹配2.1 版本兼容性清单动手之前先把软硬件环境对齐。PyInstaller 3.5 对操作系统要求不高Windows 7 到 Windows 10、32 位和 64 位都能跑但 Python 解释器版本卡得比较死。我这次用的测试环境是 Windows 10 专业版 x64 Python 3.6.8 x64算是当时最主流的组合。3.5 的兼容性可以先对照这个表项目推荐配置备注操作系统Windows 7 SP1 / 8.1 / 1032 位、64 位均可Python 版本3.6.x官方兼容上限为 3.63.7 起建议升级 PyInstallerPython 位数建议 32 位32 位产物兼容性更好但体积更大编译器Visual C Build Tools 2015源码方式安装时必需终端非管理员权限的 CMD 或 PowerShell避免 manifest 意外被标注提权很多新手在这一步会犯一个错直接用系统里的 Python 3.10 或 3.11 去跑 3.5 的源码包然后发现连安装都过不去。这不是操作问题是版本根本不兼容。如果你手上只有高版本 Python又非得用 3.5那就先装一个 Python 3.6再用虚拟环境把它隔离出来。2.2 安装前必须处理的编译器问题这里必须把 C 编译器的问题单独拎出来因为这是离线安装 PyInstaller 时最容易卡住的一环。PyInstaller 的 zip 源码包不是纯 Python 文件里面带 bootloader 的 C 源码和一系列扩展模块。setup.py在安装过程中会检查当前平台有没有可用的 C 编译器找不到就会报Unable to find vcvarsall.bat。解决办法是在安装前先装上 Visual C Build Tools。装的时候不需要把整个 Visual Studio 拉下来只需要勾选“使用 C 的桌面开发”工作负载里面包含 MSVC 编译器和 Windows SDK。装完以后重新开一个终端让系统能识别到新加的编译环境再执行安装命令。如果你用的是 PyPI 上发布的 wheel 包那编译器这步可以跳过因为 wheel 里已经预编译好了 bootloader。可问题在于内网环境下你往往只有这份源码 zip没有 wheel。所以我的建议很简单与其反复试错不如先装编译器一劳永逸。这也是 3.5 安装比新版麻烦的核心原因不是 pip 一下就能完事的。3. 核心实操从 zip 到 exe3.1 pyinstaller 的下载与安装源码包安装的正确姿势先假设你已经把pyinstaller-pyinstaller-v3.5.zip放到了本地某个工作目录。第一步不是急着解压而是先建一个干净的目录结构避免把编译产物散落在下载目录里。我的习惯是新建一个D:\pyinstaller35\source专门放源码再建一个D:\pyinstaller35\work放打包过程中生成的中间文件。解压以后进入解压目录执行安装命令cd D:\pyinstaller35\source\pyinstaller-3.5 python setup.py install如果你按照前面说的装好了 C 编译工具这一步会顺不少。不过安装过程中如果出现“skipping optional hook”之类的提示不用紧张PyInstaller 的 hooks 是按需加载的跳过一些可选 hook 不代表安装失败。真正要看的是最后几行有没有出现Finished processing dependencies for PyInstaller3.5这样的成功提示。安装完成后验证一下版本python -m PyInstaller --version如果输出3.5说明安装成功。这里有个小细节老版本里模块名虽然写作PyInstaller但命令行的入口依然是小写的pyinstaller。要是python -m PyInstaller能用而pyinstaller命令提示找不到多半是 Python 的 Scripts 目录没有加进 PATH这个放到第 4 节详细说。3.2 pyinstaller 打包 exe基本命令与资源路径安装好了接下来就是打包。PyInstaller 3.5 的核心命令不复杂最常用的就是下面这条pyinstaller -F -w --add-data assets;assets app.py拆开看-F等价于--onefile把程序连同依赖打成一个 exe。-w等价于--noconsole/--windowed不弹黑色控制台窗口。如果你的程序是 GUI 类型这个必须有。--add-data assets;assets把资源目录一并打进包里。--add-data是最容易出错的地方。3.5 在 Windows 下必须用分号把源路径和目标路径隔开很多从新版教程抄过来的人习惯用冒号结果打包出来的程序启动时找不到资源文件。新版 PyInstaller 在 Linux/macOS 下确实用冒号Windows 下也是分号所以这个差异本质是操作系统的路径分隔符不同不是 3.5 独有的。但 3.5 不会帮你做任何分隔符转换写错了也不报错运行时才报找不到文件反而更隐蔽。还有一个与路径相关的建议不要在项目源码目录里直接执行打包命令。PyInstaller 会在当前目录生成build、dist和.spec文件如果直接在源码根目录构建这几个目录会混进版本库打包完再想清理非常麻烦。我一般把要打包的入口文件app.py复制到一个独立的打包目录再在那个目录里执行命令这样每次重建都很干净。3.3 验证产物那不是最后一步打包完成后dist目录下会多出一个app.exe。很多人到这里就松了口气直接把这个 exe 拷走交付这是典型的踩坑节奏。正确做法是至少做三件事第一把 exe 复制到一个没有任何 Python 环境的干净目录双击运行确认功能正常。很多问题在开发机上根本暴露不出来比如动态导入的模块、外置配置文件、API 路径写死等都是换到干净环境才原形毕露。第二用命令行方式启动 exe。如果双击没反应在 cmd 里切到 exe 所在目录输入app.exe回车错误信息会直接打在终端里。这一步能帮你判断是运行时崩溃还是被安全软件拦截。第三关注启动速度。3.5 的--onefile模式会把所有依赖解压到系统临时目录再启动第一次启动通常会卡上两三秒。在机械硬盘或性能较差的工控机上这个时间会更长。如果你的项目对启动速度有硬性要求可以考虑不用-F改成目录模式去掉-F后生成的是一个目录里面包含 exe 和依赖文件启动会快一些代价是交付物从单个文件变成一个目录。4. 常见问题与排错实录4.1 pyinstaller 安装完运行不了命令找不到的两大原因“pyinstaller 安装完运行不了”是一个高频搜索词我收到的私信里十个有八个是这个。在 3.5 上最常见的就是终端里输入pyinstaller提示“不是内部或外部命令”。原因通常有两个一是你用的虚拟环境没有激活。如果你用conda activate py36或者workon py36进入环境后装的 PyInstaller那关闭终端后再输入命令当然找不到因为当前 shell 根本没进环境。每次使用前先确认终端提示符前面有没有环境名。二是 Python 的 Scripts 目录不在 PATH 里。Windows 下 PyInstaller 的可执行文件会被放到类似C:\Users\你的用户名\AppData\Local\Programs\Python\Python36\Scripts的路径下如果这个目录没加进系统环境变量命令自然找不到。验证方法是在终端里运行python -m PyInstaller --version这个命令不依赖 PATH只要能输出版本号说明安装本身没问题缺的只是环境变量。把 Scripts 目录加到 PATH 后新开一个终端再试即可。4.2 exe 打不开、提示缺 DLL 或 no module named xxx本机运行正常、换台机器就死这个问题 3.5 用户没少遇到。第一种情况是目标机器缺 Visual C 运行库exe 一启动就报api-ms-win-crt-runtime-l1-1-0.dll 丢失。PyInstaller 3.5 打包时不会把系统级别的 VC 运行库完整带过去尤其是一些精简版 Windows 或老旧嵌入式系统这类报错特别常见。发布时最好附带vc_redist.x64.exe或者在说明文档里让用户先装一次运行库。第二种情况是模块缺失。如果你的代码里有动态导入比如用__import__或importlib按字符串加载模块PyInstaller 的静态分析会漏掉这些依赖运行时就报ModuleNotFoundError。解决办法是打包时显式指定pyinstaller -F -w --hidden-importmy_missing_module app.py如果漏掉多个模块就写多个--hidden-import或者直接在.spec文件的hiddenimports列表里维护。我建议把动态导入的模块统一写在一个文件里打包前扫一眼能省下不少排查时间。4.3 杀毒软件误报与图标失效3.5 出厂时间太早生成的 exe 结构特征和如今主流的加壳程序有不少相似之处所以很容易被杀毒软件标记。这不是你代码的问题而是版本特征导致的。应对办法有三个第一发布前用加壳工具做一次壳处理降低特征命中率第二给 exe 做数字签名第三在发布说明里写清楚程序用途和来源方便用户向杀毒软件厂商申报白名单。签名需要证书对个人开发者来说成本不低大多数人能做的就是加壳和文档说明。图标失效是另一个高频问题。PyInstaller 3.5 对图标的校验比较严格它需要的是真正的.ico文件而且最好是 256x256 或 32x32 多尺寸混合的 ICO。很多人把一张 PNG 图片改了后缀名强行塞给--icon结果打包出来的 exe 要么没有图标要么直接报错。正确的做法是用在线转换工具或画图软件先把 PNG 导出为真正的 ICO 格式再指定路径。指定路径时也不要写相对路径用绝对路径最稳。5. 经验总结与取舍建议5.1 什么时候坚持用 3.5我把话说得直白一点如果不是场景限制我不推荐任何人现在去用 PyInstaller 3.5。它本身没有不可替代的功能优点是当年用户多、文档多、问题网上都能搜到但它的稳定是建立在用户群体大、踩坑时间长的基础上的。真正让我建议继续用 3.5 的只有三种情况项目锁死在 Python 3.6 和旧依赖上、内网隔离只能拿到 3.5 安装包、或者你手上有一个用了很久、已验证过的打包参数组合迁移新版本相当于重新做回归。如果你属于这三种情况那这篇实操笔记里的安装步骤和排错思路应该能帮你把路走通。有一点要明确不要盲目在 3.5 里追求太新的功能比如新版 PyInstaller 对 Python 3.10 和 ARM64 的支持老版本没有就是没有。5.2 如果条件允许建议怎么走如果你的环境其实没被锁死我强烈建议把 Python 升级到 3.8 以上PyInstaller 至少用 4.x 或 5.x这样在现代 Windows 上的兼容性、打包速度、exe 启动速度都会有明显改善。升级的成本不算低需要重新做一轮测试但比起老版本长期在暗处埋雷这点成本是可以接受的。如果你暂时还留在 3.5也有一些辅助手段能降低使用成本比如用.spec文件固化打包参数、把资源目录固定成相对路径、在每次打包前先跑一遍完整测试用例等。这些小改动不会改变你“必须用 3.5”的现实但能让你在旧版本里过得舒服一点。6. 关于这个 zip 最后的几句大实话最后再分享一点踩坑后的真实感受老版本工具不是不能用但一定要把它当成“需要被照顾的旧系统”来对待——环境尽量复刻当年的样子命令参数老老实实按旧语法写遇到问题优先翻当年的资料而不是拿新教程硬套。只要你愿意多花一点时间在环境对齐上PyInstaller 3.5 这个老伙计还是能把 Python 程序安安稳稳地变成 Windows 上的 exe。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/10/25 7:48:15

M7120平面磨床PLC改造实战:从继电器蜘蛛网到智能控制

从仓库角落翻出一台M7120的时候,老师傅们都说“这机器还能磨,就是电气柜里那堆中间继电器让人头疼”。这话一点不假。老款M7120平面磨床,液压靠阀,磨削靠砂轮,控制靠一堆接触器、继电器、时间继电器,线路密…

2026/10/29 6:55:14

ESP32上电不启动?Strapping引脚排查与设计避坑全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 7:48:30

AI写矢量图避坑指南:从原理到适用场景的全面剖析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/29 6:54:05

西咸新区GeoJSON电子地图:ECharts区域着色与空间查询实战

简介:这份西咸新区电子地图GeoJSON资源,面向从事数据可视化、GIS开发及大屏搭建的技术人员,解决国家级新区地图数据获取难、边界不精确的问题。资源共8个文件,以geojson和json为主,压缩包约55KB,其中geojso…

2026/10/29 6:54:05

Excel VBA进销存管理系统:小团队轻量级库存管理实战

简介:这是一套基于Excel VBA实现的进销存管理系统源码,面向中小企业管理者、财务人员及希望学习VBA办公自动化的开发者,用于解决进货、销售、库存等日常经营流程的数字化管理问题。资源包共3个文件,包含1个xlsm宏工作簿、1个custo…

2026/10/29 6:54:05

RAG项目中知识图谱的维护成本与替代方案

1. 为什么RAG项目中知识图谱可能成为技术负债在构建基于检索增强生成(RAG)系统的过程中,许多团队(包括我去年负责的项目)都会面临一个关键决策:是否引入知识图谱(Knowledge Graph)作…

2026/10/29 6:54:05

天勤量化 vs TB开拓者:期货程序化交易平台深度评测与选型指南

1. 双平台评测的出发点与整体思路1.1 为什么要把这两个平台放在一起比做期货程序化交易的人,选平台这件事几乎绕不开一个岔路口:一边是偏"写代码"路线的天勤量化,一边是偏"搭策略"路线的TB开拓者。我最早接触程序化的时候…

2026/10/29 6:54:05

context-mode:基于SQLite FTS5+BM25的轻量级上下文感知架构

1. 项目概述:什么是 context-mode?它不是个“模式”,而是一套数据驱动的上下文协同范式 最近在多个技术社区和开源项目讨论区里,“context-mode”这个词高频出现,但翻遍主流文档、RFC草案甚至GitHub热门仓库的README&…

2026/10/29 6:49:05

marketingskills:重建真实用户连接的实操能力

1. 这不是“学营销”,而是重建你和真实用户之间的连接能力“marketingskills”这个词,最近在招聘平台、自由职业接单页面、甚至小红书笔记标题里高频出现,但它绝不是指背熟4P理论、能画SWOT矩阵、会写朋友圈文案就完事了。我带过37个从零起步…

2026/10/28 14:42:12

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/28 15:28:56

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/28 3:32:29

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/29 0:03:42

学生选课系统DFD图绘制指南:边界划分与分层校验实战

简介:文档以顶层与第一层DFD图为核心,完整刻画学生选课系统的逻辑模型,面向软件工程课程设计、系统分析学习及毕设前期建模人群。顶层图界定系统边界,外部实体包括管理员、教师和学生三类角色;第一层图进一步细化用户登…

2026/10/29 0:03:42

JIRA敏捷落地:Scrum角色权限、Sprint与燃尽图避坑指南

简介:围绕“基于JIRA的敏捷开发项目管理”这一主题,面向产品负责人、Scrum Master及研发测试成员,梳理Scrum角色分工、迭代流程与JIRA工具配置的对应关系,适合初、中级团队导入敏捷管理时参考。压缩包共1个docx文件,大…

2026/10/29 0:03:42

SEMI S8人机工程验收实战:从条款拆解到现场实测的完整指南

简介:面向半导体设备设计、制造与运维工程师及安全合规人员,这份资料聚焦SEMI标准体系下的设备安全规范,重点收录SEMI S8-0308《半导体制造设备人体工程学工程安全指南》。内容围绕设备设计原则、错误与事故预防、人体工程学适配三大主线展开…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑