在新机器上 python -m venv .venv,创建过程没有报错,激活后 bin 下却没有 pip,python -m pip 报 No module named pip。乍看像缓存或者权限的锅,追下去往往不是。
python -m venv .venv .venv/bin/python -m ensurepip --upgrade .venv/bin/python -m pip --version
追下去是这么回事:venv 默认靠 ensurepip 把 pip 塞进去,发行版把 ensurepip 拆成了单独包,或者创建时带了 --without-pip。前者往往是静默跳过,环境建出来就是缺 pip 的。
「ensurepip 缺失」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。
同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
具体做法是,先看创建时是否带了 --without-pip 以及系统是否缺 python3-venv;装上发行版对应的 venv 包 删掉旧目录重建 不要在缺 pip 的环境里硬修;重建后确认 bin 下有 pip 和 python 两个入口;用 python -m pip --version 验证路径指向当前 venv。
验收就看一点,venv 的 bin 目录下出现 pip python -m pip --version 打印的路径在当前目录内。
