壹、前言
将 python 程式封装,使用者将更便于使用,而不需担心设定 python 环境
macOS 还好说,系统有附带 python,但 windows 系统下要执行就麻烦了
最近刚好有需求,故对此研究,不料踩到微软精心準备的陷阱,浪费不少时间
因此写下此笔记作为奋战纪录
本文以生成 windows 执行档为前提,着重在环境设定的问题排解
=> 想更好的阅读体验,请到Notion 同篇笔记(排版略有差异)
贰、环境确认
要封装 python 程式,首先环境要正确
感觉很直觉,但实际上坑还蛮深的,陷进去却不知道错在哪
所以请就下面几点检视一下自己的环境 >w<
终端机环境必须是 Windows 系统 (生成 windows 执行档为前提)
❌ WSL (Windows Subsystem Linux)❌ Linux 虚拟机的 Shell❌ macOS 的 Terminal✅ Windows PowerShell✅ CMD (命令提示字元)pyinstaller 生成的执行档与系统挂勾
因此,若想用 pyinstaller 生成「能在windows系统下执行的执行档」
就必须在 windows 系统中使用 pyinstaller 处理
Shell 与 Terminal 自不用说,因为环境本来就不是 windows
至于 WSL,也就是依附在 Win10 下的 Linux base 附属系统
这个附属系统属于 Linux 系统,用起来会比 PowerShell 顺心,但在此派不上用场
备注:如果打包成品要在 x32 系统执行,那就必须在 x32 系统上打包,反之则不用
Python 来源有限制
❌ Microsoft Store 安装的 python✅ 由 python 官网下载安装的 pythonpyinstaller 的 github 页面有提到,使用 Microsoft Store 版本的 python 会导致权限错误
根据实测,使用 Microsoft Store 除了权限错误,还需要解决环境变数问题
参、手把手设定环境
虽说是手把手,但我已先假设你用的是 windows 10
a. 安装 python
已经正常安装与设定的略过
重申一次,不可用 Microsoft Store 安装的 python,这是孔明的陷阱
根据 pyinstaller 的 github 页面,需要 python 3.5-3.8,实测 3.9 也可以运行


b. 安装 pyinstaller
开启 PowerShell (不知如何开启,请参照 「陆、附录 在指定目录位置开启 PowerShell」)
安装 pyinstaller
pip install pyinstaller
确认版号,出现版号即表示安装成功
pyinstaller --version
肆、疑难排解
若 pyinstaller 安装成功可显示版号,可跳过此章节
无法辨识 'pyinstaller' 词彙是否为 Cmdlet、函数、指令档或可执行程式的名称
以上错误,可能是因为「python 环境变数未设定成功」,因此找不到已安装的指令。请遵循「陆、附录 设定 python 环境变数」设定PermissionError: [Errno 13] Permission denied: ...
以上错误,可能是因为「使用 Microsoft Store 安装的 python」请遵循「参、手把手设定环境 a. 安装 python」设定 python伍、使用 Pyinstaller 打包
终于来到正题了
在要打包的程式目录开启 PowerShell (不知如何开启,请参照 「陆、附录 在指定目录位置开启 PowerShell」)打包pyinstaller -F <python file> # 打包成单执行档,适合小档pyinstaller -D <python file> # 打包成多个文件,适合框架类程式# 备注:有时你会需要用下面的方式执行python -m PyInstaller -F <python file>python -m PyInstaller -D <python file>


陆、附录
意下属于查找工具,如果已经正常运行,就不需要看啰
在指定目录位置开启 PowerShell
win
+ e
开启档案总管,选择希望终端开启时的目录位置Shift
+ 滑鼠右键
,开启选单开启 PowerShell
设定 python 环境变数
如果安装时忘记设定环境变数,会导致安装 pyinstaller 后找不到该指令
可以使用 python 安装程式来设定
到 python 官网 下载最新版的 python 安装程式
执行安装程式,勾选「Add Python to environment variable」,执行安装