具有虚拟环境的 vscode 中的 Jupyter Notebook 无法导入 Tensorflow

RTD*_*RTD 8 python visual-studio-code jupyter-notebook tensorflow2.0

我正在尝试使用 vscode 中的 jupyter 笔记本创建一个运行 tensorflow 和 tf2onnx 的隔离虚拟环境。

tf2onnx packge 建议使用 python 3.7,而我的本地 3.7.9 版本通常可以很好地与 TensorFlow 项目配合使用,因此我使用 pyenv 将本地和全局版本设置为 3.7.9。

以下是我的设置过程:

python -m venv .venv

然后在 vscode 中启动新终端后:

pip install tensorflow==2.7.0

pip freeze > requirements.txt

之后,在我的 jupyter 笔记本的单元格中,以下行失败

import tensorflow.keras as keras
Run Code Online (Sandbox Code Playgroud)

例外:

TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be 
regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:
1. Downgrade the protobuf package to 3.20.x or lower.
2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python 
parsing and will be much slower).
Run Code Online (Sandbox Code Playgroud)

此时,protobuf软件包版本在我的需求文件中显示为 v4.21.0。我尝试在安装tensorflow之前将3.20.1版本预安装到虚拟环境中,但这没有效果。

这是安装tensorflow后的完整需求文件:

absl-py==1.0.0
astunparse==1.6.3
cachetools==5.1.0
certifi==2022.5.18.1
charset-normalizer==2.0.12
flatbuffers==2.0
gast==0.4.0
google-auth==2.6.6
google-auth-oauthlib==0.4.6
google-pasta==0.2.0
grpcio==1.46.3
h5py==3.7.0
idna==3.3
importlib-metadata==4.11.4
keras==2.7.0
Keras-Preprocessing==1.1.2
libclang==14.0.1
Markdown==3.3.7
numpy==1.21.6
oauthlib==3.2.0
opt-einsum==3.3.0
protobuf==4.21.0
pyasn1==0.4.8
pyasn1-modules==0.2.8
requests==2.27.1
requests-oauthlib==1.3.1
rsa==4.8
six==1.16.0
tensorboard==2.9.0
tensorboard-data-server==0.6.1
tensorboard-plugin-wit==1.8.1
tensorflow==2.7.0
tensorflow-estimator==2.7.0
tensorflow-io-gcs-filesystem==0.26.0
termcolor==1.1.0
typing-extensions==4.2.0
urllib3==1.26.9
Werkzeug==2.1.2
wrapt==1.14.1
zipp==3.8.0
Run Code Online (Sandbox Code Playgroud)

小智 16

最近protobuf 的变化导致TensorFlow 崩溃。在安装 TensorFlow 之前降级可能不起作用,因为 TensorFlow 可能会自行提升版本。检查安装过程中是否发生这种情况。

您可能想要:

降级为

pip install --upgrade "protobuf<=3.20.1"
Run Code Online (Sandbox Code Playgroud)

安装 TensorFlow 后,或者

将 TensorFlow 升级到最新版本,因为 TensorFlow 已在 2.9.1 版本中更新了其设置文件。