Windows路径长度默认限260字符,需系统启用长路径支持且Python 3.8+配合使用pathlib.Path;注册表、组策略须设为启用,Python进程不可兼容模式运行。

Windows 默认限制路径长度为 260 字符,超出会直接抛出 FileNotFoundError 或 OSError: [WinError 206](“文件名或扩展名太长”),不是 Python 的 bug,而是系统级限制;启用长路径支持后,Python 才能正常访问超过 260 字符的路径。
如何确认当前 Windows 是否启用了长路径支持
该设置需在系统策略和 Python 运行环境两层生效。仅改注册表或组策略不够,Python 进程启动时也需明确告知使用长路径 API。
- 检查注册表项:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlFileSystemLongPathsEnabled值应为1 - 检查组策略(仅专业版/企业版):「计算机配置 → 管理模板 → 系统 → 文件系统 → 启用 Win32 长路径」必须设为「已启用」
- Python 3.8+ 默认尝试调用长路径 API,但若进程以“兼容模式”启动(如勾选了“以兼容模式运行”),仍可能失效
Python 3.8+ 中 os.path 和 pathlib 的实际行为差异
两者底层都依赖 Windows API,但 pathlib.Path 在构造时不会立即校验路径合法性,而 os.path.exists()、os.listdir() 等函数在调用瞬间才触发系统路径解析——这意味着错误发生时机不同,排查容易误判。
-
Path(r"\?C:erylongpath...")构造成功,不代表后续.exists()一定成功(仍可能因权限或盘符未映射失败) -
os.path.isdir(r"\?C:...")比os.path.exists()更早暴露[WinError 206],因为需要解析父目录结构 - 绝对不要对长路径手动拼接
"\\?\\" + path:若原路径已是 UNC(\\server\share),应改用"\\?\UNC\server\share"
绕过限制的三种实操方案(按推荐顺序)
不推荐修改所有路径为 \? 前缀——它禁用大部分相对路径解析和环境变量展开,易引发新问题。优先用系统级开启 + Python 原生调用。
-
首选:确保系统开启 + 使用
pathlib.Path(Python ≥ 3.8),例如:from pathlib import Path<br>p = Path(r"C:erydeepolderwithmanysubfolders...")<br>if p.is_dir():<br> for f in p.iterdir():<br> print(f.name)
-
临时补救:显式添加
\?前缀(仅限本地绝对路径):Path(r"\?" + str(p.absolute()));注意不能用于网络路径,也不能含.或.. -
避免触发:用
os.chdir()切到深层目录再操作,把长路径“折叠”进工作目录,适合批处理脚本;但多线程下需加锁,且无法解决跨盘符场景
真正麻烦的不是加前缀,而是混合使用 os 和 pathlib 时路径对象隐式转换丢失 \? 前缀;一旦 str(path) 出现,前缀就没了——这种细节在日志里根本看不出,只能靠断点看 path._raw_path。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











