一、问题版本
为了避免版本不一问题,想要肯定成功的可以按照我的版本来
- 我的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 pythontosolist.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文件就可以了
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论