開発
このドキュメントには、開発環境をセットアップし、さまざまなプラットフォームのソースから tensorflow-io
パッケージを構築するために必要な情報が含まれています。セットアップが完了したら、新しい ops を追加するためのガイドラインについて STYLE_GUIDE を参照してください。
IDE のセットアップ
TensorFlow I/O を開発するために Visual Studio Code を構成する方法については、このドキュメントを参照してください。
Lint
TensorFlow I/O のコードは、Bazel Buildifier、Clang Format、Black、および Pyupgrade に準拠しています。次のコマンドを使用して、ソースコードを確認し、Lintの問題を特定してください。
Bazel Buildifier と Clang Format の場合、次のコマンドは Lint エラーを自動的に識別して修正します。
または、個々の Linter を使用して Lint チェックのみを実行する場合は、上記のコマンドに black
、pyupgrade
、bazel
、または clang
を選択的に渡すことができます。
たとえば、black
の特定の Lint チェックは次を使用して実行できます。
Bazel Buildifier と Clang Format を使用した Lint 修正は、次を使用して実行できます。
個々の Python ファイルの black
と pyupgrade
を使用した Lint チェックは、次を使用して実行できます。
Lint は、以下を使用して black と pyupgrade で個々の Python ファイルを修正します。
Python
macOS
macOS Catalina 10.15.7 では、システム提供の python 3.8.2 を使用して tensorflow-io をビルドできます。そのためには tensorflow
と bazel
の両方が必要です。
注: macOS 10.15.7 のシステムデフォルトの python 3.8.2 は、コンパイラーオプションの -arch arm64 -arch x86_64
が原因で regex
のインストールエラーが発生します(https://github.com/giampaolo/psutil/issues/1832 に記載されている問題と同じです)。この問題を解決するには、arm64 ビルドオプションを削除するために export ARCHFLAGS="-arch x86_64"
が必要になります。
注意: pytest を実行するときは、ビルドプロセス後に Python が生成された共有ライブラリを利用できるように、 TFIO_DATAPATH=bazel-bin
を渡す必要があります。
トラブルシューティング
Xcode がインストールされているが、$ xcodebuild -version
が期待される出力を表示しない場合は、次のコマンドで Xcode コマンドラインを有効にする必要があります。
$ xcode-select -s /Applications/Xcode.app/Contents/Developer
.
変更を有効にするには、端末の再起動が必要になる場合があります。
サンプル出力:
Linux
Linux での tensorflow-io の開発は、macOS に似ています。必要なパッケージは、gcc、g++、git、bazel、および python 3です。ただし、デフォルトのシステムインストールバージョン以外の新しいバージョンの gcc または python が必要になる場合があります。
Ubuntu 20.04
Ubuntu 20.04 には gcc/g++、git、および python 3 が必要です。以下は依存関係をインストールし、Ubuntu 20.04 で共有ライブラリをビルドします。
CentOS 8
CentOS 8 の共有ライブラリをビルドする手順は、次を除き上記の Ubuntu 20.04 と似ています。
gcc/g++、git、unzip/which(bazel の場合)、および python3 をインストールするために使用する必要があります。
CentOS 7
CentOS 7 では、デフォルトの python と gcc のバージョンが古すぎて、tensorflow-io の共有ライブラリ(.so)をビルドできません。代わりに、Developer Toolset および rh-python36 によって提供される gcc を使用する必要があります。また、CentOS にインストールされた libstdc++ と devtoolset による新しい gcc バージョンの不一致を回避するために、libstdc++ を静的にリンクする必要があります。
さらには、ファイルシステムプラグインの静的にリンクされたライブラリのシンボルの重複を避けるために、特別なフラグ --//tensorflow_io/core:static_build
を Bazel に渡す必要あります。
以下は、bazel、devtoolset-9、rh-python36 をインストールし、共有ライブラリをビルドします。
Docker
Python 開発の場合、ここにある参照 Dockerfile を使用して、ソースから TensorFlow I/O パッケージ(tensorflow-io
)をビルドできます。さらに、事前に作成された開発イメージも使用できます。
ビルドが成功すると、パッケージファイル dist/tensorflow_io-*.whl
が生成されます。
注意: Python 開発コンテナで作業する場合、環境変数 TFIO_DATAPATH
は、 pytest
を実行して bdist_wheel
をビルドするために Bazel によってビルドされた共有 Bazel ライブラリに tensorflow-io をポイントするように自動的に設定されます。 Python の setup.py
は、引数として --data [path]
を受け入れることもできます。たとえば python setup.py --data bazel-bin bdist_wheel
です。
注意: tfio-dev コンテナを使用すると、開発者は環境を簡単に操作できますが、リリースされた whl パッケージは、 manylinux2010
の要件のために異なる方法でビルドされます。リリースされた whl パッケージの生成方法の詳細については、[ビルドステータスと CI]セクションを確認してください。
Python Wheels
次のコマンドで bazel のビルドが完了した後に、python wheel をビルドできます。
.whl ファイルが dist ディレクトリで利用可能になります。 bazel-bin
は tensorflow_io
パッケージディレクトリの外部にあるため、setup.py が必要な共有オブジェクトを見つけるには、bazel バイナリディレクトリ bazel-bin
を --data
とともに渡す必要があることに注意してください。
または、ソースのインストールを次の方法で実行できます。
同じ理由で TFIO_DATAPATH=bazel-bin
が渡されました。
-e
を使用したインストールは、上記とは異なることに注意してください。
は、TFIO_DATAPATH=bazel-bin
を使用しても、共有オブジェクトを自動的にインストールしません。代わりに、インストール後にプログラムを実行するたびに、 TFIO_DATAPATH=bazel-bin
を渡す必要があります。
テスト
一部のテストでは、実行する前に、テストコンテナを起動するか、関連するツールのローカルインスタンスを起動する必要があります。たとえば、kafka、zookeeper、schema-registry のローカルインスタンスを開始する kafka 関連のテストを実行するには、次を使用します。
Elasticsearch
や MongoDB
などのツールに関連付けられた Datasets
をテストするには、システムで docker が使用可能である必要があります。このようなシナリオでは、次を使用します。
さらに、 tensorflow-io
の一部の機能をテストする場合、データは tests
ディレクトリ自体に提供されているため、追加のツールを起動する必要はありません。たとえば、 parquet
のデータセットに関連するテストを実行するには、次を使用します。
R
R パッケージを直接テストに使用できるように、ここに参照 Dockerfile を提供します。次の方法でビルドできます。
コンテナ内で R セッションを開始し、例の Hadoop SequenceFile string.seq から SequenceFileDataset
をインスタンス化してから、次のように tfdatasets パッケージ によって提供される変換関数をデータセットで使用できます。