すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:自動パッケージングサービス

最終更新日:Mar 26, 2026

分散型 MaxFrame ジョブにおけるサードパーティ Python 依存関係の管理では、通常、各実行前に手動でパッケージを MaxCompute にアップロードする必要があります。自動パッケージングサービスはこの手順を不要にします:コード内で with_python_requirements を使用して依存関係を宣言すると、MaxFrame がランタイム時に自動的に依存関係を解決・バンドルします。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • MaxCompute に接続された MaxFrame セッション

  • (オンプレミス版 MaxFrame クライアントを使用する場合)MaxFrame SDK バージョン V0.1.0b5 以降。設定手順については、「事前準備」をご参照ください。

仕組み

  1. UDF に @with_python_requirements デコレータを適用し、関数が必要とするパッケージをリスト形式で指定します。

  2. ジョブ実行時、MaxFrame が PyPI から指定されたパッケージを解決し、ジョブ環境にバンドルします。

  3. 後続の実行では、パッケージ化済みの結果が既にキャッシュされている場合、MaxFrame は再パッケージングをスキップします。

パッケージングは初回実行時にトリガーされます。force_rebuild=False の場合、一時リソースとして保存されたキャッシュは毎日削除されます。このキャッシュがクリアされた場合、MaxFrame は次回実行時に自動的に再パッケージングを実行しますが、その分実行遅延が発生します。

with_python_requirements を使用した依存関係の宣言

with_python_requirements デコレータは、自動パッケージングサービスを利用するためのエントリポイントです。

def with_python_requirements(
    *requirements: str,
    force_rebuild: bool = False,
    prefer_binary: bool = False,
    pre_release: bool = False,
): ...

パラメーター

`requirements`(必須)

1つ以上の依存関係パッケージ指定子で、PEP 508 構文に従います — pip が使用するのと同じフォーマットです。

@with_python_requirements("scikit_learn>1.0", "xgboost>1.0")

`force_rebuild`(任意、デフォルト値:False

キャッシュ済みの依存関係を再パッケージングするかどうかを制御します。

動作
False(デフォルト)キャッシュ済みの結果が存在する場合は再パッケージングをスキップします。キャッシュされたパッケージは 一時リソース として保存され、毎日削除されます。
True最新の PyPI イメージバージョンを使用して常に再パッケージングを行います。結果は 長期リソース として保存され、自動的に削除されません。

開発および反復的なテストでは、デフォルトの False を維持してください。force_rebuild=True を指定すると、最新のパッケージバージョンへの強制アップグレードが実行され、結果が長期リソースとして保存されます。

force_rebuild=False の場合、一時リソースは毎日削除されます。実行間でキャッシュがクリアされた場合、MaxFrame は自動的に再パッケージングを実行しますが、その分次の実行に遅延が発生します。

`prefer_binary`(任意、デフォルト値:False

ソースディストリビューションではなく、事前にビルド済みのバイナリホイールファイルを優先するかどうかを制御します。

動作
False(デフォルト)優先度なし。pip が通常通り最適なマッチを解決します。
Trueバイナリホイールを優先します。これは pip に --prefer-binary オプションを渡すのと同等です。
バイナリホイールを優先するとパッケージングが高速化されますが、選択されるバージョンが最新リリースとは限らない場合があります。

`pre_release`(任意、デフォルト値:False

Alpha や Beta などのプレリリース版パッケージバージョンをパッケージング対象とするかどうかを制御します。

動作
False(デフォルト)安定版リリースのみをパッケージング対象とします。
TrueAlpha および Beta リリースも含めます。

以下の例では、with_python_requirements を使用して、DataFrame の apply ジョブに jiebacloudpicklepandas を注入しています。

import os
import maxframe.dataframe as md
from maxframe import new_session
from maxframe.udf import with_python_requirements
from odps import ODPS

# ODPS クライアントを初期化します。
# 認証情報を環境変数から読み込みます — コード内に AccessKey ID および
# AccessKey Secret をハードコーディングしないでください。
o = ODPS(
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='your-default-project',
    endpoint='your-end-point',
)

session = new_session(o)

data = [["abcd"], ["efgh"], ["ijkl"], ["mno"]]
md_df = md.DataFrame(data, columns=["col1"])

# 依存関係を宣言します。MaxFrame がランタイム時に自動的にパッケージ化します。
@with_python_requirements("jieba==0.40 cloudpickle pandas")
def process(row):
    import jieba
    row["col1"] = row["col1"] + "_" + jieba.__version__
    return row

md_result = (
    md_df.apply(
        process,
        axis=1,
        result_type="expand",
        output_type="dataframe",
        dtypes=md_df.dtypes.copy(),
    )
    .execute()
    .fetch()
)

以下のプレースホルダーを実際の値に置き換えてください。

プレースホルダー説明
your-default-projectご利用の MaxCompute プロジェクト名
your-end-pointご利用の MaxCompute エンドポイント

よくある質問

パッケージングはいつ実行されますか?

パッケージングは初回ジョブ実行の開始時にトリガーされます。パッケージ化済みの結果が既にキャッシュされている場合、MaxFrame は再パッケージングをスキップし、ジョブは即座に開始されます。

次の実行前にキャッシュされたパッケージが削除された場合はどうなりますか?

force_rebuild=False の場合、キャッシュされたパッケージは一時リソースとして保存され、毎日削除されます。次の実行前に削除された場合、MaxFrame は自動的に再パッケージングを実行します。これによりその実行に遅延が発生しますが、ジョブが失敗することはありません。

複数回の実行で最新のパッケージバージョンを確実に使用するにはどうすればよいですか?

force_rebuild=True を設定してください。MaxFrame は最新の PyPI イメージバージョンを使用して再パッケージングを行い、結果を自動的に削除されない長期リソースとして保存します。