根本原因是其他依赖或工具在安装后触发版本重置,如requirements.txt、poetry install或pip install -e .;需用虚拟环境隔离、约束文件压制传递依赖,并验证c扩展模块是否更新。

pip install numpy==1.23.5 后版本又变回高版本?
这不是安装失败,而是“装了但没生效”。根本原因是其他依赖或工具在你安装后立刻触发了版本重置——requirements.txt、poetry install、甚至 pip install -e . 都可能暗中拉起更高版本的 numpy。
常见现象:执行 pip show numpy 显示 1.23.5,但一运行 import sklearn 就报错,再查 numpy.__version__ 变成 1.26.4。
- 先确认是否被上层包强制升级:运行
pipdeptree --reverse --package numpy,看scikit-learn、torch或matplotlib是否带类似numpy>=1.24的要求 - 检查有没有
pyproject.toml或poetry.lock文件——它们比命令行安装优先级更高 - 临时禁用自动解析:加
--no-deps安装,避免连带升级cython或pybind11导致 C 扩展不匹配
为什么在系统 Python 里硬改 numpy 版本总是失败?
因为系统 Python 环境不是你的项目沙箱。全局改 numpy,可能让 apt、systemd 相关脚本或另一个 Python 项目直接崩掉——尤其在 Ubuntu/Debian 上,/usr/lib/python3/dist-packages/ 下的包受系统包管理器保护。
更隐蔽的问题是:numpy 的 C 扩展模块(如 _multiarray_umath.cpython-*.so)没被替换,导致 __version__ 显示对了,实际调用的还是旧二进制。
- 绝对不要在系统 Python 中执行
sudo pip install --force-reinstall - 必须用
python -m venv myenv或conda create -n myenv python=3.10新建隔离环境 - 激活后第一件事:运行
which python和which pip,确认路径含myenv字样
如何让降级后的 numpy 真正被 Python 进程加载?
光靠 pip install 不够,Python 运行时会缓存已导入的模块和 C 扩展。Jupyter kernel、IDE 的 Python 解释器、甚至某些守护进程都可能继续使用旧版本内存镜像。
- 在 Python 交互式环境中验证:执行
import numpy; print(numpy.__file__),路径必须指向你当前虚拟环境的site-packages,而非/usr/local/lib或系统dist-packages - Jupyter 用户必须重启 kernel,不能只 “Run all cells”——旧 kernel 不会重新加载
numpy的 C 模块 - 如果用 VS Code,检查右下角 Python 解释器路径,手动选中你刚创建的虚拟环境目录
- 检查
LD_LIBRARY_PATH是否意外指向旧 CUDA 或 OpenBLAS 路径,可能干扰numpy的底层链接
requirements.txt 里写死版本也不管用?试试约束文件
requirements.txt 只控制直接依赖,对间接依赖(比如 scikit-learn 自己要的 numpy)没有强制力。真正能压制传递依赖的是 --constraint 机制。
- 新建
constraints.txt,只写一行:numpy==1.23.5 - 安装时用:
pip install --constraint constraints.txt -r requirements.txt - 约束文件优先级高于
requirements.txt中的版本声明,也能覆盖setup.py里的install_requires - 如果项目用 Poetry,需在
pyproject.toml的[tool.poetry.dependencies]下显式写numpy = "1.23.5",并运行poetry lock重新生成锁文件
numpy 的 C 扩展模块不会随纯 Python 层版本号变化而自动更新。哪怕 __version__ 正确,若 .so 文件没被替换,数值计算仍可能出错或 segfault。验证时务必看 numpy.__file__ 路径,并确认该路径下的 core/multiarray.cpython-*.so 时间戳晚于你安装操作。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











