新闻详情

新闻详情

首页 / 资讯中心 / 详情

PyCharm 里 pip install 任何包都报 FileNotFoundError certifi.where()?一次挖到根因的排查记录

发布时间:2026/9/28 20:54:01来源:尧图网络
PyCharm 里 pip install 任何包都报 FileNotFoundError certifi.where()?一次挖到根因的排查记录
一句话结论TL;DRpip install崩在ctx.load_verify_locations(certifi.where())是因为 venv 里的pip/_vendor/certifi/cacert.pem丢了。而新建项目还会犯是因为 venv 里的 pip 是从virtualenv 的缓存镜像%LOCALAPPDATA%\pypa\virtualenv拷过去的缓存坏了 → 每个新 venv 生下来就是残缺 pip。清掉这个缓存重建即可一劳永逸。一、问题现象PyCharm 里装任何包FastAPI、Faker……都失败连pip --version之外的命令都跑不动WARNING: There was an error checking the latest version of pip. ERROR: Exception: Traceback (most recent call last): File ...\.venv\Lib\site-packages\pip\_internal\cli\base_command.py, line 107, in _run_wrapper ... File ...\pip\_internal\cli\index_command.py, line 101, in _build_session ssl_context _create_truststore_ssl_context() File ...\pip\_internal\cli\index_command.py, line 52, in _create_truststore_ssl_context ctx.load_verify_locations(certifi.where()) File ...\pip\_vendor\truststore\_api.py, line 160, in load_verify_locations return self._ctx.load_verify_locations(cafilecafile, capathcapath, cadatacadata) FileNotFoundError: [Errno 2] No such file or directory关键点报错发生在建立 HTTPS 会话阶段也就是还没联网就崩了。所以跟网络、代理、镜像源、PyCharm 都没关系。二、环境信息项值系统Windows 11IDEPyCharm 2026.1build 261.22158.340解释器Python 3.13.5官方安装版另有 3.10.11venv 创建方式PyCharm 内置 virtualenv 20.38.0pip26.0.1三、pip 为什么会崩代码级原因看 pip 26.0.1 的pip/_internal/cli/index_command.pylru_cache def _create_truststore_ssl_context() - SSLContext | None: if sys.version_info (3, 10): return None try: import ssl except ImportError: return None try: from pip._vendor import truststore except ImportError: return None ctx truststore.SSLContext(ssl.PROTOCOL_TLS_CLIENT) ctx.load_verify_locations(certifi.where()) # ← 第 52 行就是这里崩的 return ctx要点两条pip 从 24.x 起支持、26.x 默认启用truststore走系统证书库这是它比你想象的更现代的地方但它仍然会把 pip 自带的 CA 包pip/_vendor/certifi/cacert.pem额外加载进去而且用的是certifi.where()返回的路径没有做文件是否存在的判断。所以cacert.pem一旦缺失pip 在任何网络动作之前就直接抛FileNotFoundError表现就是装不了任何包。四、第一步排查venv 里的 pip 是不是残缺# 1. 文件在不在 Test-Path .venv\Lib\site-packages\pip\_vendor\certifi\cacert.pem Get-ChildItem .venv\Lib\site-packages\pip\_vendor\certifi # 正常应该看到__init__.py __main__.py core.py LICENSE py.typed cacert.pem再用 pip 自带的RECORD清单做完整性校验一眼看出到底缺了什么# check_pip.py import base64, csv, hashlib, os site rE:\PythonProject\FastAPI\.venv\Lib\site-packages record os.path.join(site, pip-26.0.1.dist-info, RECORD) for d in sorted(os.listdir(site)): if d.startswith(pip-) and d.endswith(.dist-info): rec os.path.join(site, d, RECORD) missing [] with open(rec, newline, encodingutf-8) as f: for row in csv.reader(f): if row and row[0].startswith(pip/): if not os.path.exists(os.path.join(site, row[0].replace(/, os.sep))): missing.append(row[0]) print(d, 缺失文件数:, len(missing)) for m in missing: print( , m)我这边跑出来的结果是769 个文件里只缺pip/_vendor/certifi/cacert.pem这一个。这种只缺一个文件的特征很关键——不是安装过程整体损坏而是精准丢了一个文件。五、临时修复以及为什么新建项目又犯临时修复很简单从别处那份完好的 pip 里拷一份回来。Copy-Item $env:LOCALAPPDATA\Programs\Python\Python313\Lib\site-packages\pip\_vendor\certifi\cacert.pem E:\PythonProject\FastAPI\.venv\Lib\site-packages\pip\_vendor\certifi\cacert.pem拷完这个 venv 立刻就能装包。但新建项目还是会犯——因为新项目的 venv 是全新的文件你补的是这一份不是源头。六、定位真凶venv 里的 pip 是从缓存镜像拷来的PyCharm 创建 venv 用的是它自带的 virtualenvE:\python\PyCharm 2026.1\plugins\python-ce\helpers\virtualenv-py3.pyz # virtualenv 20.38.0用-vv跑一次看它是怎么种pip 的 $env:LOCALAPPDATA\Programs\Python\Python313\python.exe E:\python\PyCharm 2026.1\plugins\python-ce\helpers\virtualenv-py3.pyz --no-download -vv $env:TEMP\testvenv关键日志节选add seed packages via FromAppData(downloadFalse, pipbundle, viacopy, app_data_dirC:\Users\xxx\AppData\Local\pypa\virtualenv) extract ...virtualenv-py3.pyz\virtualenv\seed\wheels\embed\pip-26.0.1-py3-none-any.whl to ...\pypa\virtualenv\wheel\house\pip-26.0.1-py3-none-any.whl install pip from wheel ... via CopyPipInstall build install image for pip-26.0.1-py3-none-any.whl to ...\pypa\virtualenv\wheel\3.13\image\1\CopyPipInstall\pip-26.0.1-py3-none-any copy directory ...\CopyPipInstall\pip-26.0.1-py3-none-any\pip to venv\Lib\site-packages\pip流程一目了然virtualenv-py3.pyz 里的 pip wheel种子 ↓ 解压一次 %LOCALAPPDATA%\pypa\virtualenv\wheel\house\pip-26.0.1-py3-none-any.whl ↓ 构建安装镜像缓存会被重复使用 %LOCALAPPDATA%\pypa\virtualenv\wheel\3.13\image\1\CopyPipInstall\pip-26.0.1-py3-none-any\ ↓ 拷贝 每个新建 venv\Lib\site-packages\pip顺便验证种子本身没问题——直接读 pyz 里的内层 wheelimport io, zipfile z zipfile.ZipFile(rE:\python\PyCharm 2026.1\plugins\python-ce\helpers\virtualenv-py3.pyz) inner zipfile.ZipFile(io.BytesIO(z.read( virtualenv/seed/wheels/embed/pip-26.0.1-py3-none-any.whl))) print(cacert.pem 大小:, inner.getinfo(pip/_vendor/certifi/cacert.pem).file_size) print(ZIP 校验:, OK if inner.testzip() is None else 损坏) # 输出cacert.pem 大小: 270954 ZIP 校验: OK种子 wheel 完好问题就在中间那层缓存镜像它里面的cacert.pem已经没了而 virtualenv 复用缓存时不会做完整性校验于是之后每个新 venv 都从这份坏镜像拷贝。七、根因virtualenv 的 app-data 缓存%LOCALAPPDATA%\pypa\virtualenv里的 pip 安装镜像缺失cacert.pem且缓存会被无条件复用。至于这个文件最初怎么没的最常见的是清理类 / 杀毒类软件把它当无用证书文件删掉了缓存目录一般不会被用户注意到也可能是缓存构建过程被中断。反正一旦坏了就一直坏下去。一个很有说服力的旁证我在受限权限的进程里跑同一个 pyz 时日志提示could not create app data folder ...\pypa\virtualenv\Cache due to PermissionError(13) created temporary app data folder ...\Temp\tmpXXXX也就是说它改用临时目录重新解包建出来的 venv 里cacert.pem是完好的。坏掉的只有那份长期缓存。八、一劳永逸修复# 1. 清掉 virtualenv 的坏缓存会自动重建不影响任何项目 Remove-Item -Recurse -Force $env:LOCALAPPDATA\pypa\virtualenv # 2. 顺手清 pip 缓存可选 Remove-Item -Recurse -Force $env:LOCALAPPDATA\pip\cache -ErrorAction SilentlyContinue如果提示拒绝访问用管理员 PowerShell或先重置该目录权限icacls $env:LOCALAPPDATA\pypa /reset /T /C想先确认是不是缓存坏了一条命令即可没有任何输出就说明缓存里确实没有这个文件Get-ChildItem $env:LOCALAPPDATA\pypa\virtualenv -Recurse -Filter cacert.pem验证修复走 PyCharm 完全一样的建环境路径 $env:LOCALAPPDATA\Programs\Python\Python313\python.exe E:\python\PyCharm 2026.1\plugins\python-ce\helpers\virtualenv-py3.pyz --no-download $env:TEMP\testvenv Test-Path $env:TEMP\testvenv\Lib\site-packages\pip\_vendor\certifi\cacert.pem # 期望 True输出True后回到 PyCharm删掉项目的.venv重新创建或直接新建项目再执行python -m pip install fastapi[standard]就不会再报错了之后新建的项目也都正常。九、其他可用方案备选方案命令适用场景单个 venv 补文件Copy-Item 基础解释器\pip\_vendor\certifi\cacert.pem venv\...\certifi\cacert.pem只想让手头这个环境马上能用批量补齐所有 venv见下方脚本已经有一堆坏环境用基础解释器的 pip 装进 venv 基础python -m pip install --python venv\Scripts\python.exe fastapi[standard]不想动缓存临时救急必须在终端执行PyCharm 图形化装包仍走 venv 的 pip改用 uvwinget install --idastral-sh.uv然后uv venvuv add fastapi[standard]想彻底摆脱这类问题uv 不读 certifi 的cacert.pemPyCharm 2026 原生支持 uv批量补齐脚本$src $env:LOCALAPPDATA\Programs\Python\Python313\Lib\site-packages\pip\_vendor\certifi\cacert.pem Get-ChildItem E:\PythonProject -Recurse -Force -Directory -Filter certifi -ErrorAction SilentlyContinue | Where-Object { $_.FullName -like *site-packages\pip\_vendor\certifi -and -not (Test-Path (Join-Path $_.FullName cacert.pem)) } | ForEach-Object { Copy-Item $src (Join-Path $_.FullName cacert.pem) -Force 已修复: $($_.FullName) }十、踩坑小结报错在 pip 自己的目录里就不要怀疑网络/镜像源/代理。index_command.py的构建会话阶段失败 还没联网。pip 26 虽然默认走 truststore但依旧加载 pip 自带的cacert.pem且不做文件存在性检查。这个文件缺失 pip 当场报废。修好一个 venv ≠ 一劳永逸。venv 里的 pip 是从种子 wheel → 缓存镜像 → 拷贝来的源头不修新项目必然复发。排查三板斧很好用用pip-*.dist-info/RECORD逐文件校验安装完整性能精确到只缺一个文件把坏 venv和健康 venv做目录树对比差异一目了然用virtualenv -vv看 seeding 的真实路径再直接读.pyz里的内层 wheel 验证种子是否完好。结论落点清掉%LOCALAPPDATA%\pypa\virtualenv缓存并考虑给%LOCALAPPDATA%\pypa、E:\PythonProject加杀软/清理软件白名单避免缓存再次被删。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Vivado ILA实战指南:FPGA硬件级信号观测与调试 2026/9/28 21:31:00

Vivado ILA实战指南:FPGA硬件级信号观测与调试

1. 项目概述:为什么ILA是FPGA调试不可绕过的“示波器”Vivado ILA(Integrated Logic Analyzer)不是个可有可无的附加功能,它是你在FPGA开发中真正能“看见”内部信号的唯一可靠手段。我带过十几届FPGA新人,几乎所有人踩…

阅读更多 →
AI成本治理左移:在代码提交阶段实现成本可见与优化 2026/9/28 21:31:00

AI成本治理左移:在代码提交阶段实现成本可见与优化

1. 为什么成本意识必须“左移”到每一次提交1.1 从“月底账单惊吓”说起我见过太多团队在AI功能上线后的第二个月,被云厂商的账单吓一跳。模型推理调用量暴涨、向量数据库持续扩容、GPU实例闲置率居高不下——这些问题在月末的FinOps复盘会上被反复提及,…

阅读更多 →
储能BMS三级架构详解:BMU、BCU、BAU硬件设计与实战要点 2026/9/28 21:30:46

储能BMS三级架构详解:BMU、BCU、BAU硬件设计与实战要点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
RK3588/RK3576砍掉原生LVDS,DSI转LVDS桥接方案全解析 2026/9/28 21:30:46

RK3588/RK3576砍掉原生LVDS,DSI转LVDS桥接方案全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
ASRPRO天问Block UART1与UART2串口通信配置与避坑指南 2026/9/28 21:30:46

ASRPRO天问Block UART1与UART2串口通信配置与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
LM393+CN3768搭建12V铅酸电池保护板:充放电管理全解析 2026/9/28 21:30:39

LM393+CN3768搭建12V铅酸电池保护板:充放电管理全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉