目次
PythonでProtocolBufferを利用しようとした際に、以下のエラーメッセージに遭遇した経験がある方もいるかもしれません。
ModuleNotFoundError: No module named 'google'
google というモジュール名を見て「Google系のSDKを入れればいいのか」と思いがちですが、実際には ProtocolBuffer 用のライブラリ protobuf が入っていない(あるいは正しい環境に入っていない)ことが原因です。備忘録として、よく踏むパターンと対処法をまとめます。
なぜ「google」というモジュール名で出るのか
protobuf をインストールすると、Python から見たときの import パスは from google.protobuf import ... の形になります。これは protobuf が google という名前空間パッケージ(namespace package)の下にぶら下がっている構造で、grpc・google-cloud-*・google-api-core などの Google 系ライブラリも同じ google 名前空間を共有しています。
そのため、protobuf が入っていない環境では import 段階で google 自体が見つからず、ModuleNotFoundError: No module named 'google' という一見ミスリードなメッセージが出ます。google という名前のパッケージを pip install google してしまうと、まったく別物(しかも非推奨の古いライブラリ)が入るので注意してください。
protobufライブラリのインストール
まずはPythonのパッケージマネージャー「pip」で protobuf をインストールします。ターミナルまたはコマンドプロンプトで以下を実行してください。
pip install protobuf
インストールが完了したら、Pythonスクリプトを再度実行します。多くの場合はこれだけで解決します。
仮想環境とPythonバージョンを確認する
それでも解消しない場合、ほぼ仮想環境周りの不一致が原因です。
仮想環境(venv / virtualenv / Poetry / uv 等)を使っているなら、その環境をアクティブにした状態で pip install できているかを確認してください。シェルでアクティベートし忘れたまま pip を叩くと、グローバル側に入って肝心のスクリプト実行環境には届きません。複数バージョンの Python が同居している場合は、明示的に python -m pip install protobuf の形で「いま使っている Python」に紐付けて入れるのが安全です。
python -m pip install protobuf
python -c "from google.protobuf import __version__; print(__version__)"
公式の対応バージョンとしては、protobuf Python 5.x 以降が Python 3.10〜3.14 をサポートしています[1]。Python 3.12 以降に上げたタイミングで古い protobuf 3.x 系のままだと、メタクラス周りで TypeError: Metaclasses with custom tp_new are not supported が出ることがあります[2]。古いプロジェクトを移行するときは合わせて protobuf も上げてください。
grpcio-tools や Google Cloud 系と併用するときの落とし穴
google 名前空間を共有する周辺ライブラリ(grpcio-tools / google-cloud-* / google-api-core / proto-plus など)と同居する環境では、protobuf 単独で入れても、後から別パッケージを入れた瞬間に protobuf がダウングレードされて挙動が変わることがあります。grpcio-tools 1.71 系と protobuf 6.30 系の組み合わせのように、メジャーバージョンの食い違いで衝突するケースも報告されています[3]。
このタイプは「protobuf だけ上げる」のではなく、pip install 'protobuf>=5,<6' 'grpcio-tools>=1.66' のように 同時にバージョン範囲を指定して入れ直す と解消しやすいです。pip install pipdeptree && pipdeptree -p protobuf で依存元を可視化してから揃えると見通しがよくなります。
condaやシステムPythonでハマるケース
Anaconda/Miniconda 環境で pip install protobuf した後にもエラーが続く場合は、conda install -c conda-forge protobuf で conda 側のチャネルから入れ直すと解消することがあります。conda 環境内で pip と conda の管理パッケージが衝突して、google/__init__.py が片方から見えなくなることが原因です。
macOS でシステム Python(/usr/bin/python3)に直接 pip install した場合も似たことが起きます。実際に動かしている Python の sys.path と、pip が書き込んだ site-packages の場所がずれていないか、python -c "import sys; print(sys.path)" で確認してください。
なお MIMEMultipart などメール系ライブラリと組み合わせるパイプラインでは、ProtocolBuffer 由来のエラーと別系統の AttributeError が混ざって出ることもあります。'NoneType' object has no attribute 'policy' のような email 側のエラーはこちらの記事で扱っているので、メッセージごとに切り分けてください。
Version Support | Protocol Buffers Documentation (2026-05-26 アクセス) ↩︎
Compiled Python extension does not work with Python 3.12 · Issue #12186 · protocolbuffers/protobuf (2026-05-26 アクセス) ↩︎
Python dependency conflict protobuf==6.30.1 grpcio-tools==1.71.0 · Issue #39012 · grpc/grpc (2026-05-26 アクセス) ↩︎
