コード・ファイルの編成
JupyterLab, で Python スクリプトおよびノートブック・ファイルを処理する場合、コーディングを複数のファイルに分割して、保守を容易にし、各ファイルに定義をコピーせずに複数のファイルでユーティリティー関数を使用できるようにすることができます。 これは、 Python で、 Python 定義と ステートメント を含むモジュール、およびモジュールのコレクションであるパッケージを使用して行います。
詳しくは、 モジュールとパッケージ を参照してください。 Python ・インポートを使用することにより、あるモジュールの Python ・コードを別のモデルの Python ・コードで使用できるようになります。 詳しくは、 インポート・システム を参照してください。
これらのファイルを JupyterLab で実行する場合、または デプロイメント・スペース 内のコード・パッケージ・ 資産 として実行する場合は、これらのファイルを正しく編成することが重要です。
以下のセクションでは、 JupyterLab 内のファイル、および デプロイメント・スペース 内のコード・パッケージを実行するジョブで Python インポートが正しく機能するようにするための推奨されるベスト・プラクティスについて説明します。
JupyterLab 内のファイルの構造化
JupyterLab, を開くと、左側のサイドバーの「 ファイル・ブラウザー 」タブに以下の 2 つのフォルダーが表示されます。
assettypesassets
これらのフォルダーは、 Data Refinery フローや データ資産 などのプロジェクト・ 資産 が含まれているため、コード・ファイルの保管に使用しないでください。
コード・ファイルの実行を開始するノートブック・ファイル (main.ipynb) または Python スクリプト (main.py) があり、 utils という名前のフォルダーに 2 つの追加ヘルパー・ファイルがあるとします (メイン・モジュールとも呼ばれます)。
ファイルは以下のように保管できます。
サンプル 1:
assettypes
assets
main.py
main.iypnb
utils
helper.py
helper2.py
あるいは、以下のようにして、コード・ファイルと非コード・ファイルをより明確に区別するためにファイルを保管することもできます。
サンプル 2:
assettypes
assets
src
main.py
main.iypnb
utils
helper.py
helper2.py
メイン・モジュールからのモジュールのインポート
helper モジュールを main.py または main.iypnb という名前のメイン・モジュールからインポートするには、以下を使用します。
サンプル 1 のフォルダー構造の場合:
import utils.helper as helperサンプル 2 のフォルダー構造の場合:
import src.utils.helper as helper
一部のツールでは、実行中のスクリプトまたはノートブックのフォルダーが自動的に Python パスに追加されるため、サンプル 2 に示されているフォルダー構造を使用すると、パス import utils.helper as helper を使用できます。 ただし、これはすべてのツールで行われるわけではないため、常に絶対インポートを使用する必要があります。 パッケージ内参照 を参照してください。
メイン・モジュールとして使用されるモジュールで相対パスを使用する場合、相対パスをサポートしないツールでは、次のようなインポート・エラー・メッセージが表示されることがあります。
ImportError: attempted relative import with no known parent package
他のモジュールからのモジュールのインポート
メイン・モジュール (実行を開始しないが、常にインポートされる) として意図されていないモジュールでは、相対ファイル・パス・リンクを使用できます。
例えば、 helper.py に helper2.py からのコードを組み込む場合は、次のようにします。
from . import helper2
コード・パッケージ内のファイルの構造化
コードを デプロイメント・スペース で使用したものと同じフォルダー構造でコードを実行するために必要なすべてのファイルが、作成する ZIP アーカイブ・ファイルに含まれていることを確認する必要があります。
サンプル 1 の ZIP フォルダー構造:
main.py
main.iypnb
utils
helper.py
helper2.py
サンプル 2 の ZIP フォルダー構造:
src
main.py
main.iypnb
utils
helper.py
helper2.py
サンプル 2 の ZIP ファイルに src を含めないと、絶対インポートは機能しなくなります。
パッケージのフォルダー命名規則
パッケージのフォルダー名を選択する際には注意が必要です。実行環境のプリインストール済みライブラリーを介してインポートされるモジュールの名前を選択すると、競合が発生するため、そのような名前は選択しないでください。
例えば、サンプル 2 で src ではなく code という名前のフォルダーを使用し、デフォルトの Python 環境で以下のコードを実行したとします。
import code.utils
code.utils という名前のモジュールが存在せず、 code はパッケージではないことを示すエラー・メッセージが表示されます。
このエラーは、 code という名前のモジュールが既に存在するために code をパッケージにすることができないために発生します。
フォルダー・パッケージの名前を選択する際に不確かな場合は、以下を実行してテストできます。
import myproposedfoldername
以下のような応答があるはずです。
ModuleNotFoundError: No module named 'myproposedfoldername'
その応答が表示されない場合、その名前はシステム内のモジュールによって既に使用されているため、使用しないでください。