ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

PySimpleGUI 4.60.5免费版安装指南:pip降级与版本锁定全攻略

PySimpleGUI 4.60.5免费版安装指南:pip降级与版本锁定全攻略

简介:PySimpleGUI 4.60.5免费老版本安装包及配套安装指南,面向需要绕开5.0收费限制的Python桌面应用开发者。目前pip默认安装的5.0及以上版本会提示试用30天,而这份资源提供4.60.5版本完整源码与构建产物,可自由使用,并附带三步式离线安装说明,帮助快速恢复本地GUI开发环境。压缩包为rar格式,共13个文件,以5个py源码文件为核心,辅以4个txt说明文档、PKG-INFO与egg-info等包元数据、setup.cfg构建配置,整体仅1.81MB,轻量易用。已有1392人学习下载,适合希望低成本入门PySimpleGUI、快速搭建窗口和表单应用的初中级开发者。借助该老版本,可避开收费提示,同时体验基于Tkinter、PyQt等多后端统一接口的便捷开发方式,快速创建按钮、输入框、表格等界面元素,并支持主题定制,适用于数据可视化、系统监控、工具脚本等常见桌面场景。

1. PySimpleGUI 4.60.5 老版本免费:5.0 收费之后的免费稳定选项

如果你的某个脚本昨天还在跑,今天突然报ModuleNotFoundError,先别急着改代码——很可能是 PySimpleGUI 被自动升级到了 5.x。5.0 开始走订阅收费,免费版停在 4.60.5,而相当一批教程和自助工具的代码在 5.x 里 import 直接不兼容。这里要拆的,就是 4.60.5 老版本的免费安装资源和一套从零开始的 pip 安装教程,顺便把降级、锁版本、离线备份这些坑一次性理清。适合手里有老代码、被自动升级坑过的开发者,也适合刚想用 PySimpleGUI 写桌面小工具、又不想一上来就付费的入门者。

2. 4.x 和 5.x 到底差在哪:版本收费策略与 API 变更的取舍

PySimpleGUI 在 4.x 阶段一直是自由使用的,后来 5.0 切换成收费订阅,这对老项目的影响不是“能不能用新版”,而是“pip 默认帮你升到新版以后,老代码里那些接口还在不在”。实际开发里,GUI 库的更换成本比普通工具库高得多,因为牵涉到窗口布局、事件循环、控件的回调名,散在几十个文件里,一个一个改到怀疑人生。与其面对未知的迁移成本,不如直接锁死在 4.60.5,把精力留给业务。

2.1 收费策略的分水岭:5.0 从免费转向收费订阅,4.60.5 成为免费终点

先说结论:4.60.5 是 PySimpleGUI 在免费授权阶段的最后一个稳定版本号。网上很多教程停留在 4.3x、4.5x 的年代,代码里用的还是sg.ChangeLookAndFeel()这类老函数;而 4.60.5 正好处在一个“老调用仍然兼容、新特性又补了不少”的位置。

所以在选版本的时候,我一般不建议直接跳去 4.30 或者 4.50:

  • 4.30 以前的版本在 Python 3.10+ 下偶尔有类型标注问题;
  • 4.60.5 修掉了一批文档生成和布局计算的小毛病;
  • 从 4.60.5 开始,项目把授权协议改成了商业订阅制,代码仓库也换了维护节奏。

这三点意味着,手里如果有半旧的教程、半旧的轮子脚本,锁在 4.60.5 最稳。不是说 5.x 不好,而是“能免费拿到、能按老代码跑、社区资料最多”这三个条件同时满足的版本,只有 4.60.5。

提示:收费版本并不是不能试用,但商业授权和订阅制会让小团队在分发工具时多一层合规成本。老版本没有这个负担。

2.2 代码层面的差异:4.60.5 与 5.x 的几处明显变化

先看一个最简单的窗口创建,在 4.60.5 里长这样:

import PySimpleGUI as sg layout = [ [sg.Text("Hello", key="-TEXT-")], [sg.OK()], ] window = sg.Window("Demo", layout) while True: event, values = window.read() if event in (None, "OK"): break window.close()

这段代码在 4.60.5 下直接跑,在 5.x 下大概率还是能跑,但如果你的项目里用过下面这些 API,就要注意了:

场景4.60.5 的常见写法5.x 里的变化
主题切换sg.theme("DarkBlue")保留,但部分主题名失效
窗口透明window.set_alpha(0.9)方式变了
元素更新element.update(value=...)推荐写法没变,但异常行为有差别
老风格函数sg.ChangeLookAndFeel()在 5.x 部分路径下不可用
多窗口事件window.read(timeout=...)返回结构有差异

这张表不是让你背下来,而是提醒一件事:5.x 并不是 4.60.5 的兼容升级,而是带商业授权的新基线。社区里大量教程、视频录屏、企业内部的公共组件,都是基于 4.60.5 这个免费基线写的。你在网上下载一个基于 4.x 的源码包,直接用 5.x 去跑,可能第一行import PySimpleGUI as sg不报错,但到了某个控件参数报错,报错信息直接指向新版本,那才是真的晕。

所以“选型”阶段,我的习惯是:先看项目里引用的第三方控件多不多,多就直接锁 4.60.5;如果是全新项目且团队能接受授权成本,再考虑 5.x。

2.3 为什么不选 4.60.0、4.60.4,偏要 4.60.5

你可能会问,4.60.5 和 4.60.4 差在哪里?实际上 4.60.x 这些小版本主要在做 bugfix,4.60.4 和 4.60.5 之间的差异比很多教程标题里写的“升级”小得多。但既然已经有免费的老版本停止更新,社区普遍形成的共识是:最后一个 4.x,也就是 4.60.5,是闭源免费形态下功能最全、已知问题最少的版本。

我的判据很简单:

  1. 如果包管理里能直接拿到 4.60.5,那就别装 4.60.2;
  2. 如果安装过程中发现镜像源里没有 4.60.5,可以退而求其次装 4.60.4,但要把下一章的锁版本步骤做好;
  3. 遇到sg.run()、sg.Window相关的新旧参数,以 4.60.5 内置 docstring 为准。

说句实在话,版本号就差一个小数点,真没必要纠结到凌晨。关键是装完之后用pip show或者print(sg.__version__)确认到底落到哪个版本,而不是看终端滚动条一闪而过。

3. 安装 PySimpleGUI 4.60.5:pip 指定版本的三步走与参数说明

安装这块,绝大多数情况用 pip 就够了。但“指定版本安装”这件事,有几个细节和默认行为有关,如果你不加参数直接pip install PySimpleGUI,系统会去拉最新稳定版,也就是 5.x。这一章给你一条完整的安装路径,每步都带检查动作,避免装完才意识到版本不对。

3.1 先检查当前的 Python 环境与 pip 版本

安装任何包之前,我习惯先在当前终端里确认三件事:Python 解释器路径、pip 指向的路径、当前虚拟环境是否生效。因为很多“装不上”“装错版本”的问题,最终发现是系统解释器和虚拟环境不是同一个。

# 查看 Python 主版本号 python --version # 查看 pip 指向的解释器 python -m pip --version # 列出当前环境里已有的 PySimpleGUI,确认是否装了别的版本 python -m pip show PySimpleGUI

参数说明:python -m pip这种写法比直接敲pip更稳,因为它保证pip和当前python是同一个解释器。pip show PySimpleGUI会显示已安装包的信息,如果输出WARNING: Package(s) not installed,说明当前环境还是干净的;如果已经装了 5.x,一会儿降级就有必要了。

在这步之后,把终端切到你的项目虚拟环境目录。如果没建虚拟环境,现在建一个:

# 创建名为 venv 的虚拟环境 python -m venv venv # Windows 下激活 venv\Scripts\activate # macOS / Linux 下激活 source venv/bin/activate

激活完成后命令行提示符会多出(venv)前缀。这一步能隔离系统级 Python 干扰,让后面的版本号锁定只作用于当前项目。尤其是你在系统里同时装了 Python 3.8、3.10、3.12 的时候,虚拟环境能避免“刚才装给 3.10 了,现在 3.12 找不到包”这种经典翻车。

3.2 pip 安装指定旧版本:从 4.60.5 这个 tag 拉取

明确版本安装的语法很简单,就是包名==版本号:

# 在当前环境安装 PySimpleGUI 4.60.5 python -m pip install PySimpleGUI==4.60.5

运行后,pip 会去 PyPI 上找名为PySimpleGUI且版本号精确等于4.60.5的发行文件。如果网络不通,可以加-i参数指定一个可用的公共镜像源,下面是一段常见做法:

# 使用镜像源,并禁用本地缓存,强制重新下载 python -m pip install PySimpleGUI==4.60.5 \ -i https://your-mirror.example.com/simple \ --no-cache-dir

注意这里-i后面替换成你自己能访问的镜像源地址。--no-cache-dir的意思是不要用本机 pip 缓存里的旧包,这在之前装过 5.x、缓存里残留新版文件的时候很有用。如果安装过程出现编译错误,先别慌,看日志末尾:纯 Python 包一般不需要编译,报错多半是文件下载不完整或镜像同步延迟,换源重试即可。

提示:PySimpleGUI 本身是纯 Python 包,安装过程通常几秒完成,不需要额外编译工具链。要是看到大段编译日志,说明你可能把包名拼错了。

3.3 验证安装:用 import 和版本号做双重确认

安装结束不叫结束,验证过版本才算数。验证方式就两个命令:

# 方式一:通过 pip show 看版本字段 python -m pip show PySimpleGUI # 方式二:直接 import 后打印版本号 python -c "import PySimpleGUI as sg; print(sg.__version__)"

pip show看到Version: 4.60.5只代表发行记录一致;sg.__version__是运行时包代码里的版本字符串。两者都对上了,说明装的就是目标版本。

如果想再稳妥一点,跑一个最小窗口程序,确认窗口能弹出来:

import PySimpleGUI as sg layout = [[sg.Text("4.60.5 安装验证")], [sg.OK()]] window = sg.Window("Check", layout) while True: event, values = window.read() if event in (None, "OK"): break window.close() print("窗口验证通过")

这段代码的逻辑很简单:创建窗口、读取事件、遇到关闭或 OK 按钮就退出。注意如果当前机器是无桌面环境的服务器,弹窗会失败,属于环境限制,不是安装问题。在这种环境下,只看sg.__version__就好。

4. 版本安装与降级的避坑指南:五个高频翻车现场

下面是实际使用中翻车最多的几种现象。每条都按“现象 → 原因 → 解决”给你理一遍。

4.1 现象:pip install PySimpleGUI==4.60.5结果装成了 5.x

这个我见过太多次了。看到命令行里把PySimpleGUI==4.60.5写得很规范,但装完一查版本是 5.x。排查下来一般两个原因:一个是命令写错成了pip install PySimpleGUI latest之类;另一个是当前环境之前有 5.x 的安装记录,pip 复用了缓存。

原因:pip 在没有--no-cache-dir的时候可能拿本机缓存的 wheel 文件;而某些缓存目录里存的是新版本。

解决:先卸载,再带参数安装:

python -m pip uninstall PySimpleGUI -y python -m pip install PySimpleGUI==4.60.5 --no-cache-dir

装完立刻重新执行python -c "import PySimpleGUI as sg; print(sg.__version__)"。如果还是 5.x,检查你是不是在激活的虚拟环境里敲的命令。

4.2 现象:import 直接报 ModuleNotFoundError

代码明明没有改,昨天还能跑,今天在命令行python test.py就报ModuleNotFoundError: No module named 'PySimpleGUI'。

原因:最常见的是终端激活的虚拟环境和运行脚本的解释器不一致。你之前用 Ctrl+C 复制了某条安装命令,但安装时激活的是venv1,运行脚本走的是venv2或者系统 Python。

解决:统一入口,把安装和运行都放在同一个解释器下:

python -m pip install PySimpleGUI==4.60.5 python -c "import PySimpleGUI as sg; print(sg.__version__)" python test.py

这里的关键是,python -m pip install装到的是当前python命令所对应的环境;如果后面python test.py用的也是同一个python,问题就会消失。

4.3 现象:pip 默认装了 5.x,代码里sg.theme()不识别

这个现象更隐蔽:import 不报错,但运行到sg.theme("SystemDefault")或者窗口布局里的某个参数时报错。

原因:5.x 改了部分主题名和控件参数,教程里基于 4.x 的代码跑到 5.x 上,部分参数被移除了。

解决:一是从控制台确认版本,二是把版本锁定在 requirements 里,三是如果确实需要临时跑老项目,就在脚本头部加一段防御性判断:

import PySimpleGUI as sg # 如果版本不是 4.x,直接报错,避免后面黑匣子式的问题 if not sg.__version__.startswith("4.60"): raise RuntimeError(f"当前版本 {sg.__version__} 不是 4.60.x,请降级")

这段代码的作用是把错误提前暴露,而不是让你在窗口代码里迷茫地排查。参数说明:startswith("4.60")是为了兼容 4.60.5 这类具体补丁号。

4.4 现象:离线服务器装不了,pip 一直报连接超时

内网机器没有外网权限,pip install直接卡住,报 timeout。

原因:pip 默认从 pypi 拉包,网络侧不通,而 PySimpleGUI 又没有打包进系统镜像。

解决:在有网的机器上下载 wheel 文件,再拷进内网装:

# 在有网的环境里下载 wheel 和依赖 pip download PySimpleGUI==4.60.5 -d ./wheelhouse --no-deps # 在内网环境使用本地目录安装 pip install --no-index --find-links=./wheelhouse PySimpleGUI==4.60.5

--no-deps表示只下载 PySimpleGUI 本体,因为它是纯 Python 包,多数场景没有第三方依赖;--no-index表示不再去 PyPI 搜索,只从本地目录找;--find-links告诉 pip 去哪个目录找包。三步走完,离线环境就能装。

4.5 现象:pip list里是 4.60.5,但 IDE 里运行还是 5.x

这个最容易让人怀疑人生。命令行直接跑没问题,一进 IDE 跑就报错,看 IDE 的 Python 解释器路径又指向另一个环境。

原因:IDE 一般会在打开项目时选择自己配置的解释器,不一定是终端里激活的虚拟环境。你终端装的是C:\projects\venv,IDE 用的可能是全局 Python。

解决:在 IDE 终端里运行python -c "import PySimpleGUI as sg; print(sg.__file__, sg.__version__)",看__file__路径。如果路径不在项目 venv 里,就到 IDE 设置里把解释器换到项目 venv,或者干脆在 IDE 终端里重装一次。

5. 安装后的固化与离线备份:把版本锁进 requirements 和 wheelhouse

版本装对了,麻烦才刚开始。下次任何人在这台机器或另一台机器上执行pip install -r requirements.txt,如果没有锁版本,又会拉回 5.x。这章给两个我用得最多的技巧:requirements 固化,以及把 wheel 备份到本地。

5.1 用 requirements.txt 锁死版本

把依赖写进文件,是团队协作里最基础的一层保险:

# 把当前环境内 PySimpleGUI 的精确版本导出到文件 python -m pip freeze | grep -i pysimplegui > requirements.txt

然后打开文件检查,内容应该类似PySimpleGUI==4.60.5。如果还想带上主版本范围,可以改成:

PySimpleGUI==4.60.5

注意这里不推荐写成PySimpleGUI>=4.60,<5.0,因为免费版已经停止更新,范围只会让你在未来的某一天装到不明来源的补丁包。写死补丁号,是最省事的后悔药。

5.2 离线 wheelhouse 备份:几个包占不了多少地方

如果你经常在多个内网机器之间迁移,单靠 requirements 还不够,因为有些机器连不上任何源。所以我在项目里常年保留一个wheelhouse目录,里面放着已验证过的 PySimpleGUI==4.60.5 的 wheel 文件。

# 下载到本地目录,-d 指定输出文件夹 pip download PySimpleGUI==4.60.5 -d ./wheelhouse --no-deps

拷贝到目标机器后,用--no-index --find-links安装,第四章里已经写过。这套做法有两次救了我的场:一次是客户内网电脑没有外网权限,一次是同事按网上教程装了一个魔改包,导致窗口渲染异常。我把 wheelhouse 拷过去,一分钟恢复原样。

从那以后,我每次装完第三方库,都强制多做一个动作:先把pip freeze里对应的一行单独摘进 requirements,再在有网环境里pip download一份到本地。十分钟的事,换来的却是换机器、重建环境、团队排错时都不慌。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进