PyODPS の標準機能だけでは複雑なビジネス要件を満たせない場合、既存の Python コードを再利用したり、オープンソースライブラリを使用したりすることができます。DataWorks は、データ処理能力を拡張するために 2 つの方法を提供しています。リソースとして参照することでカスタムスクリプトを読み込む方法と、カスタムイメージまたは O&M Assistant を使用してランタイム環境を設定することで強力なサードパーティパッケージを統合する方法です。このトピックでは、DataWorks の PyODPS ノードでカスタム Python スクリプトを呼び出し、オープンソースパッケージを使用する方法について説明します。
利用シーン
ご利用の環境と要件に応じて、適切な方法を選択します。
シナリオ | リソースグループタイプ | ソリューション |
オープンソースのサードパーティパッケージに依存 | サーバーレスリソースグループ | |
専用スケジューリングリソースグループ | ||
カスタムの | サーバーレスリソースグループまたは専用スケジューリングリソースグループ |
以下の図は、各ソリューションの主要なプロセスを示しています。
事前準備
開始する前に、以下の 2 つの主要な概念を理解し、どの設定方法を使用するかを決定する必要があります。
概念の説明
ノードタイプ:PyODPS 2 vs. PyODPS 3
PyODPS 2:Python 2.7 環境に基づきます。
PyODPS 3:Python 3.7+ 環境に基づきます。
推奨:Python 2 の公式サポートは終了しているため、PyODPS 3 の使用を強く推奨します。このトピックでは、PyODPS 3 を主な例として使用します。
リソースグループタイプ:サーバーレスリソースグループ vs. 専用スケジューリングリソースグループ
サーバーレスリソースグループ:推奨。このタイプのリソースグループは、弾力性があり、メンテナンスフリーです。カスタムイメージを使用して、サードパーティの依存関係を管理できます。このソリューションは強力で柔軟です。
専用スケジューリングリソースグループ:レガシーソリューション。非推奨。事前に ECS サーバーを購入し、メンテナンスする必要があります。リソースは弾力的にスケーリングできません。O&M Assistant を使用した依存関係のインストールには多くの制限があり、環境を汚染する可能性があります。
リソースグループタイプの判別
DataWorks コンソールで、[ワークスペース詳細] パネルの [リソースグループ] ページに移動し、ワークスペースにアタッチされているリソースグループのタイプを確認します。
タイプが [汎用タイプ] の場合、サーバーレスリソースグループを使用しています。
タイプが [データスケジューリング] の場合、専用スケジューリングリソースグループを使用しています。
カスタムイメージを使用したオープンソースパッケージのインストール
この方法は、サーバーレスリソースグループに適用されます。
このセクションでは、エンドツーエンドの完全なケースを通して説明します。pendulum パッケージを含むカスタム環境を作成します。次に、PyODPS 3 ノードでそれを呼び出し、特定のタイムゾーンの現在時刻を取得してフォーマットします。
ステップ 1:pendulum を含むカスタムイメージの作成
カスタムイメージは、サーバーレスリソースグループのランタイム環境を準備するために使用されます。
DataWorks コンソールにログインします。左側のナビゲーションウィンドウで、[イメージ管理] をクリックします。
[カスタムイメージ] タブをクリックします。
左上隅の [イメージの作成] をクリックします。表示されたページで、以下の主要なパラメーターを設定します。
パラメーター
説明
イメージ名
カスタムイメージの名前。例:
pyodps3_with_pendulum。参照タイプ
[DataWorks 公式イメージ] を選択します。
イメージ名 / ID
ドロップダウンリストから、DataWorks 公式イメージ dataworks_pyodps_task_pod を選択します。
サポートされているタスクタイプ
PyODPS 3 タスクタイプを選択します。
[インストールパッケージ]
[Python3] を選択し、ドロップダウンリストから pendulum パッケージを選択します。
組み込みでないオープンソースパッケージをインストールするには、スクリプトモードで手動でインストールできます。設定方法の詳細については、「カスタムイメージのパラメーターの作成」をご参照ください。
重要インターネットからオープンソースパッケージをインストールする場合、サーバーレスリソースグループにアタッチされている VPC は、パブリックネットワークアクセスが有効になっている必要があります。
[OK] をクリックしてカスタムイメージを作成します。
[カスタムイメージ] ページで、対象のイメージをテストし、その後公開します。イメージはテストに合格した後にのみ公開できます。
対象イメージの [操作] 列で、 をクリックして、カスタムイメージをワークスペースに関連付けます。

ステップ 2:PyODPS 3 ノードの作成と設定
左側のナビゲーションウィンドウで、 をクリックします。ドロップダウンリストから対象のワークスペースを選択し、[データ開発へ] をクリックします。
既存のビジネスフローの下に、PyODPS 3 ノードを作成します。例えば、ノードに
pyodps3_pendulum_testという名前を付けます。pyodps_pendulum_testノードのコードエディタに、次の Python 3 コードを入力します:# pendulum はカスタムイメージにインストールされているため、直接インポートできます。Python 3 構文 import pendulum print("サードパーティパッケージ pendulum のテストを開始します...") try: # pendulum を使用して "Asia/Shanghai" タイムゾーンの現在時刻を取得します。 shanghai_time = pendulum.now('Asia/Shanghai') # フォーマットされた時刻とタイムゾーン情報を出力します。 print(f"'pendulum' パッケージのインポートに成功しました。") print(f"現在の上海時刻は: {shanghai_time.to_datetime_string()}") print(f"対応するタイムゾーンは: {shanghai_time.timezone_name}") print("\nテストに合格しました!PyODPS ノードはサードパーティパッケージを正常に呼び出しました。") except Exception as e: print(f"テストに失敗しました。エラーが発生しました: {e}")
ステップ 3:結果のテストと検証
ツールバーで
アイコンをクリックしてコードを実行します。[パラメーター] ダイアログボックスで、作成した pyodps3_with_pendulumイメージを選択します。重要対象のイメージが見つからない場合は、イメージが現在のワークスペースにアタッチされていることを確認してください。詳細については、ステップ 1 のサブステップ 6 をご参照ください。
ページ下部の実行ログを確認します。以下の出力は、
pendulumパッケージが正常に呼び出されたことを示しています。サードパーティパッケージ pendulum のテストを開始します... 'pendulum' パッケージのインポートに成功しました。 現在の上海時刻は: 2025-09-27 15:45:00 対応するタイムゾーンは: Asia/Shanghai テストに合格しました!PyODPS ノードはサードパーティパッケージを正常に呼び出しました。
ステップ 4:PyODPS 3 ノードの公開
テストが完了したら、ノードエディタの右側にある に移動します。準備したサーバーレスリソースグループを選択し、イメージをカスタムイメージ pyodps3_with_pendulum に変更します。その後、ノードをオペレーションセンターに公開します。
O&M Assistant を使用したオープンソースパッケージのインストール
この方法は、現在では推奨されていない専用スケジューリングリソースグループ向けです。より強力で柔軟なサーバーレスリソースグループへの移行を推奨します。
DataWorks ワークスペースリストにログインします。上部のナビゲーションバーで、正しいリージョンに切り替えます。対象のワークスペースを見つけ、[操作] 列の [詳細] をクリックして、ワークスペースの製品ページに移動します。
左側のナビゲーションウィンドウで、[リソースグループ] をクリックします。関連付けられた専用スケジューリングリソースグループを見つけ、[操作] 列で をクリックします。
[O&M Assistant] ページで、左上隅の [コマンドの作成] をクリックします。
ご利用の Python バージョンに基づいて適切なコマンドを入力します。
Python 3 (PyODPS 3):他のデフォルトオプションはそのままにします。ドロップダウンリストから、Python3 パッケージタイプの下にある pendulum インストールパッケージを選択します。
Python 2 (PyODPS 2):[手動入力] モードを選択し、コマンドの内容を入力します。
pip install --upgrade pip pip install "pendulum<2.0"
[O&M Assistant] ページで、[操作] 列の [コマンドの実行] をクリックします。コマンドが正常に実行された後、対応する PyODPS ノードで直接
import pendulumを使用できます。
カスタム Python リソースの参照
自分で作成した別の .py ファイルから関数を呼び出したいだけの場合は、次の手順を実行します:
Python リソースの作成:
[データ開発] ページで、対象のビジネスフローを右クリックし、 を選択します。
[リソースの作成] ダイアログボックスで、リソースの [名前] を入力し (例:
my_utils.py)、[作成] をクリックします。Python リソースに次のコードを入力します。
# my_utils.py Python 3 構文 def say_hello(name): print(f"こんにちは、{name}!これは my_utils モジュールからです。")リソースを保存して送信します。
PyODPS 3 ノードを作成し、リソースを参照する:
対象のビジネスフローで、[MaxCompute] を右クリックし、 を選択してノードを作成します。
ノード内で、
##@resource_reference{"my_utils.py"}を使用してリソースを参照します。コードは次のとおりです:##@resource_reference{"my_utils.py"} import sys import os #リソースが配置されている現在のディレクトリを Python インタープリターの検索パスに追加します。 sys.path.append(os.path.dirname(os.path.abspath('my_utils.py'))) #これで、通常のモジュールのようにインポートして使用できます。 import my_utils my_utils.say_hello("DataWorks")
ノードを実行します。ログに "こんにちは、DataWorks!これは my_utils モジュールからです。" という出力が表示されます。
よくある質問
Q:コマンドを使用して手動でパッケージをインストールすると、カスタムイメージのテストが長時間進まないのはなぜですか?
A:タスクのランタイム環境がインターネット上のサードパーティパッケージに依存している場合、サーバーレスリソースグループにアタッチされている VPC はパブリックネットワークアクセスが有効になっている必要があります。詳細については、「リソースグループのパブリックネットワークアクセスを有効にする」をご参照ください。
https://mirrors.aliyun.com/pypi/simple/ のような別の Python パッケージソースに切り替えることも試せます。Alibaba Cloud のミラーはパブリックネットワークアクセスを必要としません。
Q:サードパーティパッケージのインポートに失敗した場合はどうすればよいですか?
カスタムイメージが正常に公開されていることを確認してください。
イメージがサポートするタスクタイプ (PyODPS 2 または 3) が、作成したノードのタイプと一致していることを確認してください。
PyODPS ノードのスケジューリング構成で、カスタムイメージが正しく選択されていることを確認してください。
パブリックリソースグループは選択できません。
インストールしたパッケージのバージョンが、ご利用の Python バージョンと互換性があるか確認してください。例えば、
pendulum2.0 以降のバージョンは Python 2 をサポートしていません。
> [ワークスペースの変更]
> [O&M Assistant]