全部產品
Search
文件中心

MaxCompute:自動化打包服務

更新時間:Oct 31, 2024

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,
): ...

上述參數說明:

  • requirements:必填,聲明一個或者多個外部依賴包,聲明需遵循PIP(Python包安裝器)所使用的規範,即PEP-508規範。例如:

  • @with_python_requirements("scikit_learn>1.0", "xgboost>1.0")
  • force_rebuild:可選,自動化打包時若第三方包已存在,是否還重複打包。取值說明:

    • False(預設值):不重複打包,但產生的包將被儲存為臨時資源,並且每天都會進行清理。

    • True:重複打包,並強制利用PyPI鏡像的最新版本資源,並儲存為長期資源。

  • prefer_binary:可選,是否優先選擇存在二進位wheel的包進行打包。取值說明:

    • False(預設值):不優先選擇。

    • True:優先選擇存在二進位wheel的包進行打包。

    • 說明

      相當於pip指定--prefer-binary,將優先選擇二進位wheel的包進行打包,可能效率較高但不一定能用到最新版本。

  • pre_release:可選,是否允許打包包含alpha/beta階段的預發布包。

    • 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(
      # 確保 ALIBABA_CLOUD_ACCESS_KEY_ID 環境變數設定為使用者 Access Key ID,
      # ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境變數設定為使用者 Access Key Secret,
      # 不建議直接使用AccessKey ID和 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"])
# 調用自動化打包服務
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()
    )