Python打包成exe(windows)或者app(mac)
一、问题版本
为了避免版本不一问题,想要肯定成功的可以按照我的版本来
我的python版本为3.8.1
安装的pyinstaller为4.5.1
二、windows安装
先卸载旧的,如果从没安装过可以省略
pip uninstall pyinstaller -y
然后安装4.5.1,并且为避免出现下载连接超时指定镜像
pip install pyinstaller==4.5.1 -i https://pypi.doubanio.com/simple/
然后进入你写好的python文件的文件夹中,打开命令行窗口
pyinstaller -F -w -i app_icon.ico --add-binary "D:\python\DLLs\tcl86t.dll;." --add-binary "D:\python\DLLs\tk86t.dll;." tosolist.py
解释:
-F
:打包成 单个 .exe 文件(所有依赖都整合到一个文件里,方便携带);-w
:打包成 无控制台窗口 的程序(打开 .exe 时不会弹出黑框,符合 “窗口版” 需求);-i app_icon.ico
:设置图标(也可以先删掉,等打包完成之后再设定图标也可以);--add-binary "D:\python\DLLs\tcl86t.dll;." --add-binary "D:\python\DLLs\tk86t.dll;."
这部分是指定你的python中的dll文件,避免出现未知错误,如果不写也能成功那更好。
如果要写,那么请将路径更换成你自己的路径。如果找不到,那就在控制台输入
where python
tosolist.py 这个就是你要打包的python文件名称
到这步就完成了,双击dist文件夹中的exe文件就行了。你也可以发送快捷方式到桌面。
三、mac安装
大致逻辑相同
# 先升级 pip(避免旧版本报错)
python3 -m pip install --upgrade pip -i https://pypi.doubanio.com/simple/# 安装 PyInstaller(无需指定版本,默认会装兼容当前 Python 的稳定版)
python3 -m pip install pyinstaller -i https://pypi.doubanio.com/simple/
然后进入到对应文件夹下
#输入以下命令,回车开始打包(针对 Tkinter 程序优化,避免 macOS 下的依赖缺失):
pyinstaller -F -w --add-binary "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_tkinter.cpython-38-darwin.so:." --add-data "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter:tkinter" password_manager_gui_fixed.py
命令参数解释( macOS 重点!):
参数 | 作用 |
---|---|
-F | 打包成「单个文件」(最终会生成 .app 应用,而非零散文件) |
-w | 无控制台窗口(打开 .app 时不弹出终端黑框,符合窗口版需求) |
--add-binary "xxx:." | 强制添加 macOS 版 Tkinter 的核心动态库(_tkinter.cpython-38-darwin.so ),避免 “找不到 Tkinter” 错误 |
--add-data "xxx:tkinter" | 复制 Tkinter 的依赖文件到打包目录,确保窗口控件正常显示 |
password_manager_gui_fixed.py | 你的 Python 脚本文件名(必须和实际一致) |
路径注意事项:
- 上述命令中的
3.8
对应 Python 3.8 版本,若你的 Python 是 3.9,需将路径中的3.8
改成3.9
(比如/Library/Frameworks/Python.framework/Versions/3.9/...
); - 若不知道 Tkinter 依赖的具体路径,可在终端输入以下命令查询,然后替换到打包命令中:
# 查找 _tkinter 动态库路径 find /Library/Frameworks/Python.framework -name "_tkinter.cpython-*.so" # 查找 tkinter 依赖文件夹路径 find /Library/Frameworks/Python.framework -name "tkinter" -type d
然后依然在dist文件夹中使用app文件就可以了