Todos os produtos
Search
Central de documentação

MaxCompute:Serviço de empacotamento automatizado

Última atualização: Jun 26, 2026

O gerenciamento de dependências Python de terceiros em jobs distribuídos do MaxFrame geralmente exige o upload manual de pacotes para o MaxCompute antes de cada execução. O serviço de empacotamento automático elimina essa etapa: declare suas dependências no código usando with_python_requirements e o MaxFrame as resolverá e agrupará automaticamente durante a execução.

Pré-requisitos

Antes de começar, verifique se você possui:

  • Uma sessão do MaxFrame conectada ao MaxCompute

  • (Se estiver usando o cliente MaxFrame on-premises) MaxFrame SDK versão V0.1.0b5 ou posterior. Consulte Preparativos para obter instruções de configuração.

Como funciona

  1. Decore sua UDF com @with_python_requirements, listando os pacotes necessários para sua função.

  2. Durante a execução do job, o MaxFrame resolve os pacotes listados no PyPI e os agrupa no ambiente do job.

  3. Nas execuções subsequentes, caso o resultado do empacotamento já esteja em cache, o MaxFrame ignora o reempacotamento.

O empacotamento é acionado na primeira execução. Se o cache for limpo (recursos temporários são excluídos diariamente quando force_rebuild=False ), o MaxFrame reempacota automaticamente na próxima execução, o que aumenta a latência.

Declarar dependências com with_python_requirements

O decorador with_python_requirements é o ponto de entrada para o serviço de empacotamento automático.

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

Parâmetros

requirements (obrigatório)

Um ou mais especificadores de pacotes de dependência, seguindo a sintaxe da PEP 508 — o mesmo formato usado pelo pip.

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

force_rebuild (opcional, padrão: False)

Controla se o MaxFrame deve reempacotar dependências que já estão em cache.

Valor

Comportamento

False (padrão)

Ignora o reempacotamento se existir um resultado em cache. O pacote em cache é armazenado como um recurso temporário e excluído diariamente.

True

Sempre reempacota usando a versão mais recente da imagem do PyPI. O resultado é armazenado como um recurso de longo prazo e não é excluído automaticamente.

Para desenvolvimento e testes iterativos, mantenha o valor padrão False. Utilize force_rebuild=True quando desejar forçar uma atualização para a versão mais recente do pacote e armazenar o resultado como um recurso de longo prazo.

Com force_rebuild=False , o recurso temporário é excluído diariamente. Caso o cache seja limpo entre as execuções, o MaxFrame reempacota automaticamente, aumentando a latência da próxima execução.

prefer_binary (opcional, padrão: False)

Defina se o MaxFrame deve priorizar arquivos wheel binários pré-compilados em vez de distribuições de source.

Valor

Comportamento

False (padrão)

Sem preferência; o pip resolve a melhor correspondência normalmente.

True

Prioriza wheels binários, equivalente a passar --prefer-binary para o pip.

Priorizar wheels binários pode acelerar o empacotamento, mas a versão selecionada pode não ser a release mais recente.

pre_release (opcional, padrão: False)

Determina se versões de pré-release (alfa ou beta) dos pacotes são elegíveis para empacotamento.

Valor

Comportamento

False (padrão)

Apenas releases estáveis são empacotadas.

True

Releases alfa e beta são incluídas.

Exemplo

O exemplo abaixo utiliza with_python_requirements para injetar jieba, cloudpickle e pandas em um job apply de DataFrame.

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

# Initialize the ODPS client.
# Load credentials from environment variables — avoid hardcoding AccessKey ID
# and AccessKey secret in your code.
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"])

# Declare dependencies. MaxFrame packages them automatically at runtime.
@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()
)

Substitua os seguintes placeholders pelos seus valores reais:

Placeholder

Descrição

your-default-project

Nome do seu projeto no MaxCompute

your-end-point

Seu endpoint do MaxCompute

FAQ

Quando ocorre o empacotamento?

O empacotamento é acionado no início da primeira execução do job. Se o resultado do empacotamento já estiver em cache, o MaxFrame ignora o reempacotamento e o job inicia imediatamente.

O que acontece se o pacote em cache for excluído antes da minha próxima execução?

Com force_rebuild=False, o pacote em cache é armazenado como um recurso temporário e excluído diariamente. Caso seja excluído antes da próxima execução, o MaxFrame reempacota automaticamente. Isso aumenta a latência dessa execução específica, mas não causa falha no job.

Como garantir que as versões mais recentes dos pacotes sejam usadas nas diferentes execuções?

Defina force_rebuild=True. O MaxFrame reempacota usando a versão mais recente da imagem do PyPI e armazena o resultado como um recurso de longo prazo, que não é excluído automaticamente.