protobufのインストール【PythonでProtocol Buffers】

protobufのインストール【PythonでProtocol Buffers】 プログラミング

「Protocol BuffersをPythonで処理したい」
「JSON・XMLより、高速かつ小さい転送量でデータを扱いたい」

このような場合は、protobufの出番です。
protobufを使えば、PythonでProtocol Buffersに対応できます。

本記事の内容

  • protobufとは?
  • protobufのシステム要件
  • protobufのインストール
  • protobufの動作確認

それでは、上記に沿って解説していきます。

protobufとは?

protobufとは、Protocol Buffers(プロトコルバッファー)を扱うためのPythonライブラリのことです。
Protocol Buffersは、Googleが開発したシリアライズフォーマットになります。

そして、Protocol BufferはXMLのように構造化されたデータに対応しています。
「XMLが遅いから、新しく作ったった!」ということなんでしょう。

Google曰く、XMLの20〜100倍高速ということです。
同時に、データ量が3〜10倍小さくもなるとGoogleは主張しています。

あと、jsonと比較しても10倍以上は高速になるというデータもあります。
jsonやXMLよりも、転送量と処理速度がいづれも改善されるということです。

そんなProtocol BuffersをPythonで扱う際には、protobufの出番となります。

以上、protobufについて説明しました。
次は、protobufのシステム要件を確認します。

protobufのシステム要件

現時点(2021年10月)でのprotobufの最新バージョンは、3.18.1となります。
この最新バージョンは、2021年10月06日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは、注意が必要となります。
公式(setup.py)には、つぎのように記述されています。

でも、Python 3.5以降しかインストールができないようになっています。
setup.pyには、次のように記述されています。

Python 3.5であったとしても、Pythonの公式開発サイクルには準じていません。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月
3.72018年6月27日2023年6月
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月

2021年末には、Python 3.6もサポート対象外となります。
そう考えると、Pythonのアップグレードをしておいた方がよいでしょう。

ここまでの内容をまとめると、OSは基本的には何でもOK。
ただし、Python 3.5以降が必須ということになります。

以上、protobufのシステム要件を説明しました。
次は、protobufをインストールします。

protobufのインストール

まずは、現状のインストール済みパッケージを確認しておきます。

>pip list 
Package    Version 
---------- ------- 
pip        21.2.4 
setuptools 58.2.0

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、protobufのインストールです。
protobufのインストールは、以下のコマンドとなります。

pip install protobuf

インストールは、すぐに終わります。
では、どんなパッケージがインストールされたのかを確認しましょう。

 >pip list 
Package    Version 
---------- ------- 
pip        21.2.4 
protobuf   3.18.1 
setuptools 58.2.0

protobufが依存するパッケージは、ないようです。
これなら、どんな環境にでも容易にprotobufを導入できます。

以上、protobufのインストールを説明しました。
最後は、protobufの動作確認を行います。

protobufの動作確認

動作確認は、公式の手順に従うと結構面倒です。
https://developers.google.com/protocol-buffers/docs/pythontutorial

そこで、動作確認に必要なモノ一式を用意しました。
公式の手順に従いつつ、面倒な部分をショートカットできるようにしています。

protobufの動作確認用ファイル一式

上記から、ファイルをダウンロードします。
ダウンロードしたファイルを解凍した中身は、以下。

上記のうち、次の二つはGitHub上でも公開されているサンプルコードです。

  • add_person.py
  • list_people.py

公開されているURLは、以下。
https://github.com/protocolbuffers/protobuf/tree/master/examples

ただし、add_person.pyは次の箇所を変更しています。

try: 
  raw_input          # Python 2 
except NameError: 
  raw_input = input  # Python 3

Python 2は対象外であるため、try部分を除去する形です。

では、これらファイルを使ってprotobufの動作確認を行いましょう。
ファイルは、すべて同じ階層に設置します。

まずは、次のコマンドを実行します。
personの情報を、ADDRESS_BOOK_FILEに追加する処理になります。

python add_person.py ADDRESS_BOOK_FILE

実行すると、次のように入力を求められます。

>python add_person.py ADDRESS_BOOK_FILE 
ADDRESS_BOOK_FILE: File not found.  Creating a new file. 
Enter person ID number:

適当に以下のように入力していきます。

>python add_person.py ADDRESS_BOOK_FILE 
ADDRESS_BOOK_FILE: File not found.  Creating a new file. 
Enter person ID number: 12345 
Enter name: test_person 
Enter email address (blank for none): test@test.com 
Enter a phone number (or leave blank to finish): 09011112222 
Is this a mobile, home, or work phone? work 
Enter a phone number (or leave blank to finish):

処理が完了すると、同じ階層上にADDRESS_BOOK_FILEファイルが作成されています。

このファイルを無理やり、エディタで開いてみます。

バイナリファイルを無理やりエディタで開いたような感じです。
今度は、ADDRESS_BOOK_FILEを確認します。

次のコマンドで確認できます。

python list_people.py ADDRESS_BOOK_FILE

実行した結果は、以下。

>python list_people.py ADDRESS_BOOK_FILE 
Person ID: 12345 
  Name: test_person 
  E-mail address: test@test.com 
  Work phone #: 09011112222

入力した値が、表示されています。
ここまで確認できれば、protobufの動作確認は問題ありません。

以上、protobufの動作確認を説明しました。

タイトルとURLをコピーしました