根本原因是tensorflow==2.5.0硬依赖已下线的keras-nightly~=2.5.0.dev,导致PyPI无法解析;应卸载独立keras/keras-nightly,改用tf.keras并升级至tensorflow>=2.10以避免生态断链。

pip install tensorflow 报错找不到 keras-nightly~=2.5.0.dev
根本原因是 tensorflow==2.5.0 的 setup.py 明确声明依赖 keras-nightly~=2.5.0.dev,但这个包早已从 PyPI 正式源下线,国内镜像源同步滞后或缓存缺失时更易触发该错误。
这不是网络问题,也不是 pip 配置问题,而是版本锁死导致的生态断链。官方源偶尔还能临时回滚提供该 dev 包,但不可靠;国内源基本不收录 nightly 类包。
- 不要加
-i https://pypi.tuna.tsinghua.edu.cn/simple/或其他镜像源 —— 它们不托管keras-nightly - 直接用官方源:运行
pip install tensorflow==2.5.0 -i https://pypi.org/simple/ - 若仍失败,说明你本地已有冲突的
keras或keras-nightly,先执行pip uninstall keras keras-nightly - 安装后务必运行
pip check,确认无版本冲突
from tensorflow import keras 失败但 from keras import layers 成功
这说明你装了独立的 keras 包(比如 pip install keras),而非 TensorFlow 内置的 tf.keras。TensorFlow 2.6+ 起已完全内置 Keras,不再推荐单独安装 keras 包 —— 否则会覆盖、干扰 tf.keras 的模块结构。
PyCharm 或 VS Code 报红但代码能跑,大概率是 IDE 缓存了旧的 stub 或路径映射,和实际运行环境不一致。
立即学习“Python免费学习笔记(深入)”;
- 删掉所有独立
keras相关包:pip uninstall keras keras-nightly - 只保留
tensorflow,然后用from tensorflow import keras导入 - 检查
keras.__version__是否等于tensorflow.__version__—— 理论上应一致 - IDE 报错?清缓存:
File → Invalidate Caches and Restart(PyCharm)
重装 keras-nightly 真的能解决问题?
不能,而且非常危险。重装 keras-nightly 是治标不治本,还可能引发更隐蔽的冲突:
-
keras-nightly是 TensorFlow 2.5 时期的临时开发包,与当前主流tensorflow>=2.10不兼容 - 它会强制降级或覆盖
keras的核心模块,导致tf.keras.layers.LayerNormalization等新 API 消失 - 运行时可能报
ImportError: cannot import name 'keras_tensor' from 'tensorflow.python.keras.engine' - 真正该做的是:放弃
keras-nightly,升级到tensorflow>=2.10,使用统一的tf.keras
LayerNormalization 找不到 / ImportError: cannot import name 'LayerNormalization'
这是最典型的“版本错配”信号。该类在 tensorflow>=2.1.0 中才稳定引入,但如果你混装了 keras 和 tensorflow,或者用了过老的 tf-nightly,就会丢失该符号。
- 运行
python -c "import tensorflow as tf; print(tf.__version__)";确认版本 ≥ 2.1 - 禁止执行
pip install keras—— 它会把keras.layers.LayerNormalization替换为旧版实现 - 正确导入方式永远是:
from tensorflow.keras.layers import LayerNormalization,不是from keras.layers - 如果项目必须用
keras独立包,请严格锁定版本,例如pip install keras==2.10.0(仅适配 TF 2.10)
最常被忽略的一点:TensorFlow 的 tf.keras 和独立 keras 包不是简单“可互换”的两个实现,它们的模块树、序列化格式、甚至权重加载逻辑都不同。一旦混用,模型保存/加载、迁移学习、分布式训练都可能静默失败。


















