🛠️ 虚拟环境中安装 TensorFlow 报错及修复全记录(含 protobuf、.nfs 锁文件、Keras 报错等)

本文记录在基于 Linux/NFS 文件系统的远程服务器(如 Featurize 云平台)中,使用虚拟环境 /cloud/RF-LSTM-CEEMDAN/envs 时安装 TensorFlowKerasprotobuf 等 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 文件供上传?

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐