如何解决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 加载,热加载不可靠。