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

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

最終更新日:Jan 08, 2025

MaxFrameは、Python開発におけるサードパーティパッケージの管理を簡素化する自動パッケージサービスを提供します。 このサービスでは、ジョブ開発中に必要な外部依存パッケージを宣言できます。 ジョブの実行中、依存関係ファイルは自動的にパッケージ化され、ジョブ環境に統合されます。 パッケージを手動でアップロードする必要はありません。 これにより、パッケージ管理が簡単になります。

注意事項

標準のMaxFrame SDK (オンプレミスMaxFrameクライアント) を使用してMaxFrameにアクセスする場合は、MaxFrame SDKのバージョンがV0.1.0b5以降であることを確認してください。 MaxFrameにアクセスする方法の詳細については、「準備」をご参照ください。

自动包装サービスの说明

MaxFrameでは、with_python_requirements関数を使用して自動パッケージサービスを呼び出すことができます。 次のコードは、構文の例を示しています。


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

パラメーターの説明:

  • 要件: 必須。 このパラメーターは、1つ以上の外部依存関係パッケージを宣言するために使用できます。 宣言は、Python pipのパッケージインストーラで使用されるPEP 508の仕様に準拠している必要があります。 サンプルコード:

  • @with_python_requirements("scikit_learn>1.0", "xgboost>1.0")
  • force_rebuild: オプションです。 このパラメータは、自動パッケージング中にサードパーティパッケージが既に存在する場合に繰り返しパッケージングを実行するかどうかを指定します。 有効な値:

    • False: パッケージングは繰り返し実行されませんが、生成されたパッケージは一時的なリソースとして保存され、毎日削除されます。 デフォルト値です。

    • True: パッケージングが繰り返し実行され、PyPIイメージの最新バージョンのリソースが強制的に使用され、長期リソースとして保存されます。

  • prefer_binary: オプション。 バイナリホイールファイルを優先的にパッケージ化するかどうかを指定します。 有効な値:

    • False: システムはバイナリホイールファイルを優先的にパッケージ化しません。 デフォルト値です。

    • True: システムはバイナリホイールファイルを優先的にパッケージ化します。

    • 説明

      このパラメーターをTrueに設定することは、pip-- preferred-binaryを指定することと同じです。これは、バイナリホイールファイルを優先的にパッケージ化します。 パッケージング効率は高いかもしれませんが、最新バージョンのパッケージは使用できません。

  • pre_release: オプション。 このパラメーターは、アルファフェーズまたはベータフェーズで事前リリースされたファイルをパッケージ化できるかどうかを指定します。 有効な値:

    • false: アルファまたはベータフェーズで事前リリースされたファイルはパッケージ化できません。 デフォルト値です。

    • True: アルファまたはベータフェーズで事前リリースされたファイルをパッケージ化できます。

サンプルコード

次のコードは、サードパーティパッケージを自動的にパッケージ化する方法の例を示しています。

from odps import ODPS
from odps.udf import annotate
import os
from odps import ODPS, options
import maxframe.dataframe as md
from maxframe import new_session

o = ODPS(
      # Set the environment variable ALIBABA_CLOUD_ACCESS_KEY_ID to the AccessKey ID of your Alibaba Cloud account. 
      # Set the environment variable ALIBABA_CLOUD_ACCESS_KEY_SECRET to the AccessKey secret of your Alibaba Cloud account. 
      # We recommend that you do not directly use the strings of your AccessKey ID and AccessKey secret. 
      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"])
# Call the automatic packaging service.
from maxframe.udf import with_python_requirements
@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()
    )