如何解决Python安装库时遭遇长路径限制的问题_在Windows注册表中启用长路径

必须启用LongPathsEnabled注册表项并重启系统,因Windows默认MAX_PATH限制260字符导致pip构建深层目录失败,且仅改注册表不充分,需同时满足注册表值为1、使用PowerShell运行pip、pip版本≥21.3。

Python 安装库时因路径超 260 字符失败,不是 pip 或 Python 本身的问题,而是 Windows 系统级限制未解除——必须启用 LongPathsEnabled 注册表项,且需确认 Python 进程实际使用了新路径规则。

为什么 pip install 会卡在 “No such file or directory” 长路径错误

典型报错如:error: could not create 'buildlibsupersetstaticssets.terser-plugin-cachecontent-v2sha512fe8df4f5ee7921b2270d4e4b41484d51b0f9179c662a55d62128f18abf1686780a3620666b8d0f53752f414c3c1bdf8cafd5de04e357c01b4ec561ab7581': No such file or directory。这不是权限或网络问题,而是 Windows 在调用 CreateDirectoryW 等 Win32 API 时,默认仍走 MAX_PATH 路径解析逻辑。即使你用的是 Python 3.12、pip 24.x,只要系统没开长路径支持,构建临时目录(尤其是嵌套极深的 buildlib...)就会直接失败。

注册表启用 LongPathsEnabled 是必要但不充分条件

仅修改注册表还不够,必须确保以下三点同时满足:

  • 注册表项 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlFileSystemLongPathsEnabled 值为 1(DWORD)
  • Python 进程以“启用长路径感知”方式启动:即不依赖旧版 CRT 封装,且未被父进程(如 cmd.exe)强制降级
  • 使用的 pip 版本 ≥ 21.3(2021 年后发布),它内部已适配 \? 前缀路径逻辑;低于此版本即使系统开了长路径也无效

验证是否生效最简单的方法是运行:

Get-ItemProperty -Path 'HKLM:SYSTEMCurrentControlSetControlFileSystem' -Name 'LongPathsEnabled'

返回值为 1 才算成功写入。

Sitekick

一个AI登陆页面自动构建器

mklink / pip cache / venv 创建失败?检查 PowerShell 是否绕过 cmd.exe 启动

很多用户改完注册表仍失败,是因为在 cmd.exe 中运行 pip install,而 cmd.exe 默认不传递长路径能力给子进程。解决方案是:

  • 改用 PowerShell(非 PowerShell ISE)运行 pip,它从 Windows 10 1607 起原生支持长路径上下文
  • 禁用 pip 的缓存加速(临时):pip install --no-cache-dir package_name,避免 %LOCALAPPDATA%pipCache 下生成深层路径
  • 创建虚拟环境时指定短路径:python -m venv C:envpy312,而非 C:UsersAliceProjectsmy-super-long-project.venv
  • 若必须用 mklink 指向长路径目标,需在命令前加 \? 前缀:mklink /D mylink "\?C:erylongpath hatexceeds�chars"

Python 自身仍可能 fallback 到短路径逻辑

即便系统和 pip 都就绪,某些 Python 扩展(如用 C 扩展编译的包)在调用 os.makedirs() 时,若未显式传入 exist_ok=True 或未处理 FileNotFoundError,仍可能因底层 CRT 库未更新而中断。此时可:

  • 升级 setuptools:pip install -U setuptools(≥ 60.0 版本对长路径更鲁棒)
  • 设置环境变量强制启用:set PYTHONIOENCODING=utf-8 & set PYTHONUTF8=1(虽不直接解决路径,但避免编码层二次截断)
  • 终极兜底:在项目根目录执行 git config core.longpaths true(如果用 Git 管理源码),防止 Git checkout 时自身触发路径截断

最关键的细节常被忽略:注册表修改后必须重启计算机,而不是仅重启终端或 Python 进程——因为 LongPathsEnabled 是内核级开关,由 Session Manager 加载,热加载不可靠。

相关推荐:

为什么Python脚本在任务计划程序中由于路径问题无法运行?

根本原因是Windows任务计划程序默认工作目录为C:\Windows\System32,导致相对路径失效;需强制切换工作目录、使用绝对路径、配置完整Python解释器路径、显式添加环境变量、重定向日志并启用历史记录。 任务计划程序中Python脚本找不到模块或文件 根本原因不是Python本身出错...

如何通过Python sys.path动态添加模块搜索路径以解决导入错误?

直接修改sys.path不推荐长期使用,仅适用于临时调试等场景;其不生效主因是模块已缓存于sys.modules,须在首次import前操作,且路径顺序、有效性及环境隔离需严格注意。 直接改sys.path能解决导入问题,但不推荐作为长期方案;它适合临时调试、打包后路径未知或嵌入式场景,用错位置或顺...

如何解决Python多进程共享大字典时的内存拷贝问题?

直接用dict传给子进程会导致内存翻倍,因fork后的写时复制被Python内部操作(如引用计数、哈希查找)意外触发;共享只读字典应使用shared_memory+序列化,配合显式清理。 直接用dict传给子进程,内存几乎必然翻倍——不是因为你要改它,而是Python解释器自己就在偷偷写它。 为什么...