深度学习环境部署踩坑实录:TensorFlow、Keras、protobuf 报错解决大全
本文记录了在Linux/NFS远程服务器上安装TensorFlow时遇到的常见问题及解决方案。主要包含两类问题:1) protobuf版本冲突或文件锁定(表现为.nfs文件占用),需终止相关进程并重装protobuf 3.20.3;2) Keras与TensorFlow版本不兼容,建议安装TensorFlow 2.4.1并使用tf.keras接口。文章提供了整合修复脚本,并附上在Jupyter中使
🛠️ 虚拟环境中安装 TensorFlow 报错及修复全记录(含 protobuf、.nfs 锁文件、Keras 报错等)
本文记录在基于 Linux/NFS 文件系统的远程服务器(如 Featurize 云平台)中,使用虚拟环境
/cloud/RF-LSTM-CEEMDAN/envs时安装TensorFlow、Keras、protobuf等 Python 包所遇到的一系列报错及解决方案,适用于 Jupyter Notebook 用户、深度学习开发者参考。
💥 报错一:protobuf 版本冲突或损坏
在安装或运行部分依赖 protobuf 的库时出现如下错误:
TypeError: Descriptors cannot be created directly.
If this call came from a _pb2.py file, your generated code is out of date...
或在安装过程中看到:
WARNING: Ignoring invalid distribution -rotobuf (/home/xxx/site-packages)
ERROR: Could not install packages due to an OSError: [Errno 16] Device or resource busy: '.nfs00000000xxxxx'
📌 原因分析:
- 使用了过高版本的
protobuf(>3.20)但代码是旧版_pb2.py生成的。 - 在 NFS 文件系统上,
.nfsXXX文件表示被锁定的文件句柄未释放。 - 有 Python 进程占用了相关文件,导致无法安装或卸载。
✅ 解决方案:
1. 查看并终止占用进程
运行以下命令找出所有活跃 Python 进程:
ps aux | grep python

结束这些可能占用 .nfs 锁的进程,例如:
kill -9 10354 9058 9081 9116 9138
⚠️ 注意:不要结束与当前终端或 Jupyter 主进程有关的 PID,可多次尝试。
2. 清除损坏 protobuf 并重新安装
pip uninstall protobuf -y
rm -rf /home/featurize/work/RF-LSTM-CEEMDAN/envs/lib/python3.7/site-packages/protobuf*
rm -rf /home/featurize/work/RF-LSTM-CEEMDAN/envs/lib/python3.7/site-packages/-rotobuf*
pip install protobuf==3.20.3
💥 报错二:Keras 与 TensorFlow 不兼容
报错信息:
ImportError: Keras requires TensorFlow 2.2 or higher.
或者:
ModuleNotFoundError: No module named 'tensorflow.keras.layers.experimental.preprocessing'

📌 原因分析:
- 当前安装的
Keras版本太新,但TensorFlow太旧(<2.2)。 - 或者直接导入
keras而非tensorflow.keras,也容易出现兼容性问题。
✅ 修复方案(推荐)
卸载旧版本并重装兼容组合:
pip uninstall keras tensorflow -y
pip install tensorflow==2.4.1 # 自动安装匹配的 Keras
✅ 建议统一使用
from tensorflow.keras...而非from keras...导入模型和层。
✨ 最终建议:整合一键修复脚本
将以下内容保存为 fix_tf_env.sh,在终端中运行:
#!/bin/bash
# Step 1: Kill occupied processes
echo "🔪 Killing Python processes that may lock .nfs files..."
kill -9 10354 9058 9081 9116 9138 2>/dev/null
# Step 2: Clean corrupted protobuf
echo "🧹 Cleaning corrupted protobuf installation..."
pip uninstall protobuf -y
rm -rf /home/featurize/work/RF-LSTM-CEEMDAN/envs/lib/python3.7/site-packages/protobuf*
rm -rf /home/featurize/work/RF-LSTM-CEEMDAN/envs/lib/python3.7/site-packages/-rotobuf*
# Step 3: Reinstall compatible versions
echo "📦 Installing compatible versions..."
pip install protobuf==3.20.3
pip install --force-reinstall tensorflow==2.4.1
echo "✅ All done!"
运行:
bash fix_tf_env.sh
🧠 附:如何在 Jupyter 中使用自定义虚拟环境
激活虚拟环境后执行:
pip install ipykernel
python -m ipykernel install --user --name rf-lstm-env --display-name "Python (RF-LSTM-CEEMDAN)"
然后在 Jupyter 中即可选择内核 "Python (RF-LSTM-CEEMDAN)"。
✅ 总结
| 问题 | 原因 | 解决方案 |
|---|---|---|
| protobuf 报错 | 版本过高或损坏 | 降级到 3.20.3,清理旧包 |
| .nfs 文件 busy | 有 Python 占用 | kill 占用进程后重试安装 |
| keras 与 tensorflow 不兼容 | 版本不一致 | 安装 tensorflow 2.4.1 并使用 tf.keras |
如果你在服务器(如 Featurize.cn、HPC)环境中开发深度学习模型,建议为每个项目单独配置虚拟环境,并锁定包版本。
如需 .sh 文件打包或进一步优化 Jupyter 环境部署,可以留言交流!
是否需要我把这篇整理为 .md 或 .docx 文件供上传?
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)