【Protobuf】”TypeError: Descriptors cannot not be created directly.”を解決する【solved】
Pythonでtensorflowをインポートしようとしたときに以下のようなエラーが出てきて、解決方法を見つけたのでまとめる。
import tensorflow
↓
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).
【解決法】protobufのバージョンを下げる
protobufのバージョンが高いことがエラーの原因だった。
バージョンは最初4.21.1だったので、これから3.20.1に下げることでこのエラーは解決できた。
以下のコマンドを実行してprotobufのバージョンを3.20.1に変更。
pip install protobuf==3.20.1
参考
[Python] Release 4.21.0 broke multiple Google Cloud client libraries ("TypeError: Descriptors cannot not be created directly.") · Issue #10051 · protocolbuffers/protobuf
Example error for the google-cloud-logging==3.1.1 library using protobuf==4.21.0: Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/p...
libprotocのバージョンを変えてもエラーは消えない
最初はlibprotocのバージョンを3.20.1にすると勘違いして以下に従って実行していた。
Ubuntu に最新版のprotobufをインストール - Qiita
公式のリリースノートから最新のversionを確認。2019/07/17時点では3.9.0最新版をDL(versionは適宜変更)$ curl -OL …
これではエラーは消えず、protobufのバージョンを3.20.1に変更して解決できた。
人気記事
人気記事はこちら。