如果你最近在 PyCharm 里装包、装插件,或者跑一个稍微大点的 Python 脚本时,突然弹出一句:
OSError: [WinError 1455] 页面文件太小,无法完成操作
先别急着怀疑是不是自己的代码写得有问题,也不用第一时间把锅甩给某个第三方库。这个报错在 Windows 开发机上非常常见,而且绝大多数情况下,你的 C 盘并没有满,物理内存也看着还有余量。它跟“磁盘空间不足”完全是两码事。
这篇文章是我在 Windows + PyCharm 环境下反复踩坑之后整理出来的完整排查思路与实战方案。我会从最直接的虚拟内存调整讲起,再逐步深入到 PyCharm 自身的 JVM 内存配置、pip 安装大依赖时的临时空间问题、以及 32 位解释器带来的地址空间限制,最后给出一个可以照着做的验证链路。无论你是刚转 PyCharm 的新手,还是被这个问题困扰已久的开发老手,按顺序排查大概率能把问题按住。
1. 先看清楚这个报错拦在了哪一步:三种典型触发场景
WinError 1455 不是 PyCharm 独有的错误,但我们在 PyCharm 里遇到它的频率格外高。要解决问题,第一步不是急着改参数,而是确认它到底在什么操作、什么阶段被触发。不同触发场景的侧重点差别很大。
1.1 场景一:pip install 安装依赖包时当场暴雷
最常见的情况是在 PyCharm 的终端里执行pip install xxx时突然报错,尤其当你安装的包依赖树比较大时——比如机器学习相关的库,或者带多个 C 扩展的包。pip 在解压 wheel 包、运行 setup.py、或者安装嵌套依赖的时候,会申请大量临时文件和内存空间,系统一旦没法继续分配,就会抛出这个错误。
注意,这时候报错信息通常不止一行,可能还伴随着ERROR: Failed building wheel、error: command 'gcc' failed之类的信息。很多人把锅甩给 pip,其实 pip 只是那个“压死骆驼的最后一根稻草”,真正的问题是底层的内存/页面文件余量已经见底了。
1.2 场景二:插件安装或项目索引阶段崩溃
第二种情况更像“慢性病”。PyCharm 本身就是跑在 Java 虚拟机上的,它的插件市场下载、插件加载、项目索引构建,全都是吃内存的大户。如果你同时开着好几个项目窗口,或者刚安装了一个体积比较大的插件(比如某些前端框架的智能提示插件),PyCharm 会一次性向系统申请一大块内存,触发页面文件不足。
这种场景的表现往往是:PyCharm 界面还开着,但点哪儿都卡,过一会儿弹窗报 WinError 1455,重启之后过一阵子又复发。很折磨人。
1.3 场景三:运行重型 Python 脚本时弹出
还有一种情况跟 PyCharm 本身关系不大:你的脚本需要大量内存。比如用 pandas 处理大 DataFrame、加载深度学习模型、或者开了多进程任务。此时 Python 解释器进程、PyCharm 的 JVM 进程、系统里其他乱七八糟的驻留程序三方叠加,把整个系统的内存提交到上限。
我见过一台 8GB 内存的开发机,只开了一个 PyCharm、一个浏览器、一个微信,内存占用就到了 7GB 以上,再跑个稍微大点的脚本,WinError 1455 几乎是必然的。
| 触发场景 | 直观表现 | 问题侧重点 |
|---|---|---|
| pip install 大依赖包 | 终端直接抛 1455,常伴 Failed building wheel | 临时目录空间 + 进程提交内存 |
| 插件安装 / 索引构建 | PyCharm 卡死后弹报错,重启后间歇出现 | JVM 堆内存 + 系统内存不足 |
| 运行重型脚本 | 脚本跑到一半崩溃,系统整体卡顿 | Python 进程内存 + 系统提交上限 |
看清楚场景后,接下来的解决方案就有了方向。但前提是,你得明白这个报错背后的机制到底是什么,否则改了半天参数可能南辕北辙。
2. 别只盯着报错字面:WinError 1455 的底层逻辑
“页面文件太小”这句话太有迷惑性了。我最初排查时下意识以为是页面文件设置得不够大,一通乱调后问题依旧。实际上,这个报错的完整含义远比字面丰富。
2.1 “页面文件太小”到底是指谁
先做个类比。物理内存是你的办公桌,页面文件(pagefile.sys)是手边的临时货架。办公桌放不下所有资料时,你会把暂时不用的东西搬到货架上去。但如果办公桌和货架加起来都不够放,新来的文件就只能堵在门口。
系统给所有进程“承诺”的可分配内存总量,叫做提交内存(Commit Charge),它的上限大致等于物理内存容量加上所有页面文件的大小。当系统内存(物理内存 + 页面文件)整体逼近这个上限时,任何新的内存申请都可能失败,报错就会以“页面文件太小”的形式出现。
说白了,这不一定是你页面文件设置得小,而是“全部家当加起来已经不够分了”。很多人看到 C 盘空闲还有几十 GB,就觉得空间充足,但页面文件和普通文件不一样,它的上限是提前设定好的,有再多空闲磁盘,系统也不会自动无限扩张。
2.2 系统提交内存上限与 32/64 位地址空间的差异
这里要区分两件事:一是系统的全局提交上限,二是单个进程自己的地址空间限制。
全局提交上限很好理解,就是我上面说的物理内存 + 页面文件总和的限制。而单个进程的限制则取决于它是 32 位还是 64 位。一个 32 位进程最多只能访问约 4GB 地址空间,实际往往只能访问 2-3GB。如果某个 Python 解释器或者 PyCharm 自身是 32 位版本,哪怕你物理内存加到 32GB,单个进程也可能因为自身地址空间不够而报 WinError 1455。
这也是为什么很多人在大内存机器上依然会碰到这个错误——瓶颈不在系统总量,而在进程窗口太小。
2.3 为什么 PyCharm 和 Python 的组合特别容易触发
PyCharm 是 JVM 程序,JVM 的默认堆内存会按照机器物理内存大小自动调整。一台 8GB 内存的机器,PyCharm 经常会给自己分到 2GB 以上;Python 进程再占 1GB 多;浏览器、聊天工具、后台驻留程序再瓜分剩下的;Windows 自己还有一堆缓存和系统服务。所有东西加在一起,提交内存很容易撞上上限。
更要命的是,Windows 上进程退出后内存的回收并不总是立刻完成,内存碎片化也更明显,导致表面上看着内存够用,申请一大块连续空间时却失败。这就是为什么明明“看起来够用”,却还是持续报错。
理解了这个机制,后面所有解决方案就都能串起来了:要么让系统总容量变大(调整页面文件、加内存),要么减少单个进程的申请量(调小 PyCharm 堆内存、换 64 位解释器),要么避开某个高占用操作(清理临时目录、缓存)。
3. 优先级最高的系统级修复:让页面文件真正够用
如果 WinError 1455 已经频繁到影响日常工作,我最建议先做的不是折腾 PyCharm,而是先让 Windows 的虚拟内存“底盘”变厚。以下操作需要管理员权限,但步骤很简单。
3.1 手动调整虚拟内存大小的完整路径
- 右键“此电脑” → 属性 → 右侧“高级系统设置”。
- 在“系统属性”窗口里切到“高级”选项卡,找到“性能”区域,点“设置”。
- 在弹出的“性能选项”里切到“高级”选项卡,找到“虚拟内存”区域,点“更改”。
- 取消勾选“自动管理所有驱动器的分页文件大小”。
- 选中你的系统盘(通常是 C 盘),勾选“自定义大小”,输入初始大小和最大值。
- 点“设置”按钮,再一路“确定”,重启电脑。
最容易被忽略的一步就是第 6 步:很多人改了数值之后直接点“确定”就走了,根本没点旁边的“设置”按钮,这样修改是不会生效的。我第一次调的时候也吃过这个亏,改完重启发现页面文件一点没变。
关于数值,我建议不要盲目设成一个大数,按物理内存的档位来更合理:
| 物理内存 | 建议初始大小 (MB) | 建议最大值 (MB) | 备注 |
|---|---|---|---|
| 4GB | 2048 | 4096 | 条件允许建议直接加内存 |
| 8GB | 3072 | 8192 | 常见开发机,够用 |
| 16GB | 4096 | 16384 | 可保持系统自动管理 |
| 32GB 及以上 | 8192 | 24576 | 特殊情况再手动加大 |
如果你不喜欢手算,也可以勾选“系统管理的大小”,让 Windows 自己动态维护。实测中,大多数 8GB 内存的机器用手动 3072~8192 的效果比系统自动管理更稳定,因为它减少了页面文件频繁伸缩带来的额外开销。
3.2 盘符选择与磁盘容量的前置检查
修改虚拟内存前,最好先确认目标磁盘还有足够空间。页面文件按最大值预留空间,一个设置为 8192MB 的页面文件,需要磁盘至少有 8GB 以上的自由空间才稳妥。
如果你的 C 盘空间紧张,可以把页面文件设置在 D 盘或 E 盘。步骤是先回到虚拟内存设置界面,在 C 盘上选择“无分页文件”,点“设置”;再选中 D 盘,勾选“自定义大小”,填入数值。这样就把主页面文件挪到了空间更大的盘上。
不过我不建议让 C 盘完全没有页面文件。虽然日常运行不一定报错,但某些系统组件、崩溃转储以及部分调试工具仍然依赖 C 盘的页面文件。尽量保留一个几百 MB 的分页文件在 C 盘,再把大头放到其他盘。
3.3 救急操作:临时释放可用的系统内存
调整页面文件后系统需要重启,这在工作进行到一半时不太现实。如果你正赶着把任务跑完,可以先做几个立竿见影的救急操作:
- 关掉浏览器里不用的标签页,尤其是那种挂着大页面或者在线视频的页面。浏览器每个标签就是一个独立进程,内存释放立竿见影。
- 退出暂时不用的聊天工具、文档编辑器、以及各种“装机必备”的驻留软件。
- 清理临时目录:按
Win + R,输入%temp%回车,把里面的文件能删的删掉。这个操作不解决根本问题,但可以降低临时文件对页面文件的瞬时压力。
这些操作治标不治本,但能在紧要关头帮你把当前工作跑完,让后续的系统级调整有充裕的时间去执行。
4. 从 PyCharm 内部下手:JVM 内存与解释器配置
系统级调整做完之后,接下来要管管 PyCharm 自己。它才是那个在你开发过程中持续吃内存的角色。指望它少吃点,有两个关键方向:调整 JVM 堆内存参数,以及确保使用 64 位 Python 解释器。
4.1 用官方入口修改自定义 VM 选项
PyCharm 提供了一个很友好的入口,不需要去安装目录里手工改那些被系统保护的文件。打开 PyCharm,从顶部菜单找到Help → Edit Custom VM Options...,它会直接打开或者帮你生成一个idea64.vmoptions文件。
注意,不同版本入口位置可能略有差异,但核心思路一致。如果你用的是较早的版本,可能在Configure → Edit Custom VM Options里。这个文件里主要关注三个参数:
-Xms:JVM 启动时分配的初始堆内存。-Xmx:JVM 能使用的最大堆内存。-XX:ReservedCodeCacheSize:预留的代码缓存空间,一般不需要动。
很多人有个误区:觉得报 1455 就是内存不够,于是把 PyCharm 的-Xmx往大了调。这恰恰是反的。把 JVM 最大堆内存调大,意味着 PyCharm 在内存紧张时会更早、更猛烈地向系统申请内存,说白了就是让它更积极地参与提交内存竞争,反而更容易触发页面文件不足。
正确的思路是:在满足日常开发流畅度的前提下,把-Xmx压到合理档位,把物理内存让给 Python 解释器和系统本身。改完文件后,必须完全退出 PyCharm 再重新打开,参数才会生效。
4.2 不同配置档位的参考参数
我比较推荐先按物理内存档位估算:
| 物理内存 | 建议 -Xms | 建议 -Xmx | 备注 |
|---|---|---|---|
| 8GB | 256m | 1500m | 重点照顾其他程序和 Python 进程 |
| 16GB | 512m | 2500m | 大项目可以放宽到 3000m |
| 32GB | 1024m | 4000m | 这时基本不用担心内存不足 |
比如一台 8GB 内存的开发机,我会把idea64.vmoptions里相关位置改成:
-Xms256m -Xmx1500m -XX:ReservedCodeCacheSize=240m如果你的电脑只有 4GB 内存,那么-Xmx要压到 1024m 以内才稳。宁可 PyCharm 偶尔提示内存不足,也不要让它把整台机器的提交内存顶爆。
提示:改完 vmoptions 之后,一定要用“File → Invalidate Caches / Restart”或者手动完全关闭 PyCharm 再重启,否则你可能盯着旧参数调试半天,问题照旧。
4.3 确认你用的是 64 位 Python 解释器
这一点经常被人忽略。如果你用的是 32 位 Python,哪怕物理内存充足,单个进程也会卡在 2-3GB 的地址空间上限,跑大数据处理时非常容易触发 WinError 1455。
判断当前解释器是不是 64 位,直接在 PyCharm 的终端里执行:
python -c "import platform; print(platform.architecture())"如果输出('64bit', 'WindowsPE'),就是 64 位。也可以换一种写法:
python -c "import sys; print(sys.maxsize > 2**32)"输出True就是 64 位,False就是 32 位。发现是 32 位的话,就去 Python 官网下载 64 位安装包装一个,然后到 PyCharm 的Settings → Project → Python Interpreter → Add Interpreter里把解释器换过去。
换完后,单个 Python 进程可申请的地址空间会从 2-3GB 直接跃升到不受限(理论上受系统总内存约束),这对跑 pandas、numpy、TensorFlow 这类吃内存的库来说,效果立竿见影。
5. 针对特定操作的组合姿势:pip、插件、后台程序
系统设置和 PyCharm 基础配置都到位之后,剩下的就是针对具体触发场景做精细化管理。这里拆成三个部分:pip 安装、插件和索引、以及后台程序抢占。
5.1 pip 安装时如何减少临时空间占用
回到标题里最常见的场景——用 pip 装包时遇到 WinError 1455。此时除了确保系统全局内存充足外,还可以降低 pip 在安装过程中的峰值占用。
pip 在安装时会把 wheel 包解压到临时目录,尤其是从源码安装带 C 扩展的包时,编译过程会产生大量中间文件并申请额外内存。对策有以下几条:
- 安装时禁用缓存:
pip install --no-cache-dir 包名--no-cache-dir会让 pip 跳过本地缓存读写逻辑,虽然下载慢一点,但能明显降低临时文件对页面文件的压力。
- 清理历史缓存:
pip cache purge长期累积的 pip 缓存可能占好几个 GB,清理干净既释放磁盘空间,也减少后续安装时的负担。
- 尽量选预编译的 wheel 包:
在 PyPI 上优先选择带.whl后缀的包,而不是让 pip 现场拉源码去编译。编译过程内存峰值比直接安装 wheel 大得多,报错概率也高很多。如果某个包没有对应平台的 wheel,那就要等到内存充足的时候再安装。
5.2 插件安装与索引的内存占用控制
PyCharm 的索引构建非常吃内存。项目越大,索引时内存峰值越高。碰到安装插件后频繁 1455 的情况,我会做这几件事:
- 关掉不需要的项目窗口。每个 PyCharm 窗口都是一套独立的 JVM 工作环境,窗口开得越多,内存占用翻倍越快。
- 在Settings → Project → Project Structure里把不需要索引的目录(比如
build、venv、node_modules这类目录)标记为排除状态,PyCharm 就不会疯狂扫描它们。 - 尽量少装功能重叠的插件。很多插件平时并不会一直占用内存,但在加载更新或扫描代码的时候会瞬间顶高内存水位。
如果你碰到的是索引阶段崩溃,还有一个立竿见影的办法:临时在系统设置里把页面文件最大值再提一档(比如从 8GB 提到 16GB),等索引构建完成后,再改回来。索引是一次性动作,扛过去之后就再也不会因为这个触发了。
5.3 杀毒软件、浏览器等后台程序的隐形挤压
这部分是最容易被忽视的。Windows 自带的杀毒软件在做实时监控或全盘扫描时,经常盯着你 Python 工作目录的临时文件不放。PyCharm 一边创建临时文件,杀毒软件一边扫描,内存和磁盘开销同时翻倍,WinError 1455 就这么被“逼”出来了。
此外,浏览器是现代系统内存消耗的大户。一个放了几十个标签页的浏览器,占据 2-3GB 内存是正常现象。跑重型任务之前,可以把不用的标签页收进去,或者直接关掉浏览器。聊天工具、企业通讯软件,一样会占不少内存,遇到 1455 时可以临时退出,跑完任务再开回来。
有时候一台 16GB 内存的机器,清理完后台闭路程序后可用内存能多出 4-5GB,这往往就是能不能跑通重型脚本的关键差距。
6. 一次完整的排查验证链路
前面列了很多方法,但不是每台机器都需要全部用上。如果你不想盲目地从第一条试到第七条,我建议按下面的链路走一遍,定位瓶颈,再对症下药。
6.1 用任务管理器量化“缺到什么程度”
按下Ctrl + Shift + Esc打开任务管理器,切到“性能”标签,点“内存”。在这里关注两件事:
- 右上角的“内存使用情况”,看总容量的百分比。
- 下方“已提交”区域:显示的是当前所有进程的提交内存总额和系统提交限制。
当“已提交”里的当前值非常接近限制值时,系统就已经在风险区了。这种情况下,不管 PyCharm 怎么优化,都需要先把页面文件调大,或者关掉一些驻留程序。反之,如果系统提交内存还有大量空闲,那么问题大概率出在单个进程(比如 PyCharm 或 Python 解释器)本身的地址空间限制上。
6.2 按修改顺序做 A/B 验证
我不建议一次把所有参数全改掉。那样如果问题解决了,你也不知道是哪一个改动起了效果。更合理的顺序是:
- 第一步,先清理后台程序,关掉多余的浏览器标签,重启一次,看是否复现。这一步成本最低,不少场景直接就能解决。
- 如果仍然报错,打开任务管理器看“已提交”是否接近上限。是的话,按第 3 节的方法调整页面文件,重启验证。
- 页面文件调完还报错,进入 PyCharm 层面,按第 4.1 节调小
-Xmx,重启 PyCharm 验证。 - 如果只是运行某个特定大脚本才报错,再检查解释器位宽,按 4.3 节换成 64 位解释器。
- 因为 pip install 报错的,给 pip 加
--no-cache-dir,同时执行一次pip cache purge。
每做一步,就重新执行之前会触发报错的操作。大部分情况下,走到第二步或第三步就能解决问题。如果全部走完仍然报错,那就需要考虑物理内存确实不够用,该加点内存条了。
6.3 避免复发的几个长效习惯
1455 解决一次不算完,如果平时习惯不好,过阵子还会回来。下面这几个习惯能有效降低复发概率:
- 定期清理临时目录和 pip 缓存。一个月清一次
pip cache purge,顺手把%temp%目录里的垃圾文件删掉 - 不要同时开好几个大型项目。在 PyCharm 里多用“最近项目列表切换历史项目,而不是直接开新窗口”。
- 安装依赖很多的包之前,先看一眼任务管理器,如果内存占用已经很高了,就先关掉几个程序再安装。
我自己最后遇到这个问题,是用一台 8GB 内存的开发机装某个依赖很多的库时,把页面文件从“系统管理”改成手动 8GB,同时把 PyCharm 的-Xmx从默认值调低到 1500MB,之后半年再没出现过。如果你那台机器已经是 16GB 内存还频繁报 1455,优先怀疑 32 位解释器,这个坑隐蔽得很。最后提醒一句:调整页面文件后一定要重启系统,调整 vmoptions 后一定要完全退出 PyCharm 再重开,少了这两步,前面所有操作都等于白做。