【Protobuf】”TypeError: Descriptors cannot not be created directly.”を解決する【solved】

スポンサーリンク

【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に変更して解決できた。

人気記事

人気記事はこちら。

CUDA、cuDNNのバージョンをターミナルで調べるコマンド
【Pytorch】テンソルを連結する方法(cat・stack)
【Pytorch】テンソルの次元を追加・削除する方法【dim】
【Protobuf】"TypeError: Descriptors cannot not be created directly."を解決する【solved】
【Python】Tensorflowをダウングレード・アップグレードするコマンド
タイトルとURLをコピーしました