Carregamento de um pacote Python existente

O Snowflake CLI permite que você adicione pacotes Python existentes às importações do Snowpark usando os comandos snow snowpark package. Você pode usar pacotes já implementados, como os de PyPi, em suas funções e procedimentos.

Para adicionar um pacote Python às importações do Snowpark, faça o seguinte:

  1. Verificação se um pacote já está disponível.

  2. Download de um pacote e criação de um artefato Snowflake.

  3. Carregamento do pacote em um estágio Snowflake.

  4. Uso do pacote em procedimentos e funções do Snowpark.

Verificação se um pacote já está disponível

Para verificar se um pacote ainda não está disponível, use o comando de pesquisa de pacote snow snowpark package lookup.

O exemplo a seguir ilustra a busca por um pacote que já está disponível no canal Snowflake Anaconda:

snow snowpark package lookup numpy
Copy
Package `numpy` is available in Anaconda. Latest available version: 1.26.4.

Se um pacote não estiver disponível no canal Snowflake Anaconda, você poderá receber uma mensagem semelhante à seguinte:

snow snowpark package lookup july
Copy
Package `july` is not available in Anaconda. To prepare Snowpark compatible package run:

  snow snowpark package create july

Para mais informações, consulte o comando snowpark package lookup.

Download de um pacote e criação de um artefato Snowflake

Para baixar um pacote e criar um artefato Snowflake para upload, use o comando snow snowpark package create.

snow snowpark package create <name>
Copy

onde:

  • <name > pode ser qualquer especificador de requisito compatível com pip, como um nome de pacote, um URL para um pacote ou um caminho de arquivo local.

Opções adicionais:

  • --allow-shared-libraries: Permite bibliotecas compartilhadas (.so/.dll) ao usar pacotes instalados através de pip.

  • --ignore-anaconda: não procura pacotes no canal Snowflake Anaconda.

  • --index-url: especifica o URL básico do Python Package Index a ser usado para pesquisa de pacotes. Esse URL deve apontar para um repositório compatível com PEP 503 (a API do repositório simples) ou um diretório local disposto no mesmo formato.

  • --skip-version-check: ignora a comparação de versões de dependências entre requisitos e Anaconda.

Os exemplos a seguir ilustram algumas situações diferentes para criar artefatos Snowflake:

Exemplo: criar um pacote com dependências do Anaconda

Este exemplo cria um pacote Python como um arquivo zip que pode ser carregado em um estágio e posteriormente importado por um aplicativo Snowpark Python. As dependências do pacote “july” são encontradas no canal Anaconda, então elas foram excluídas do arquivo .zip. O comando exibe os pacotes que você precisa incluir no requirements.txt de seu projeto Snowpark.

snow snowpark package create july==0.1
Copy
Package july.zip created. You can now upload it to a stage using
snow snowpark package upload -f july.zip -s <stage-name>`
and reference it in your procedure or function.
Remember to add it to imports in the procedure or function definition.

The package july==0.1 is successfully created, but depends on the following
Anaconda libraries. They need to be included in project requirements,
as their are not included in .zip.
matplotlib
numpy

Exemplo: criar um pacote usando a opção --ignore-anaconda

Este exemplo cria o pacote july.zip que você pode usar em seu projeto Snowpark sem precisar adicionar nenhuma dependência ao arquivo requirements.txt. As mensagens de erro indicam que alguns pacotes contêm bibliotecas compartilhadas, o que pode não funcionar, como ao criar um pacote usando o Windows.

snow snowpark package create july==0.1 --ignore-anaconda --allow-shared-libraries
Copy
2024-05-09 15:34:02 ERROR Following dependencies utilise shared libraries, not supported by Conda:
2024-05-09 15:34:02 ERROR contourpy
numpy
pillow
kiwisolver
matplotlib
fonttools
2024-05-09 15:34:02 ERROR You may still try to create your package with --allow-shared-libraries, but the might not work.
2024-05-09 15:34:02 ERROR You may also request adding the package to Snowflake Conda channel
2024-05-09 15:34:02 ERROR at https://support.anaconda.com/

Package july.zip created. You can now upload it to a stage using
snow snowpark package upload -f july.zip -s <stage-name>`
and reference it in your procedure or function.
Remember to add it to imports in the procedure or function definition.

Exemplo: criar um pacote já disponível no canal Snowflake Anaconda

Este exemplo falha ao criar o pacote porque ele já existe. Você ainda pode criar o pacote à força usando a opção --ignore-anaconda.

snow snowpark package create matplotlib
Copy
Package matplotlib is already available in Snowflake Anaconda Channel.

Para obter mais informações sobre como criar um pacote, consulte o comando snowpark package create.

Carregamento do pacote em um estágio Snowflake

Para enviar seu pacote, use o comando snow snowpark package upload.

Este comando carrega um arquivo zip do pacote Python para um estágio do Snowflake para que ele possa ser referenciado nas importações de um procedimento ou função.

snow snowpark package upload --file="july.zip" --stage="packages"
Copy
Package july.zip UPLOADED to Snowflake @packages/july.zip.

Uso do pacote em procedimentos e funções do Snowpark

Para usar o pacote em procedimentos ou funções, adicione-o ao parâmetro imports da seção definição do Snowpark em snowflake.yml.

get_custom_package_version:
  handler: "functions.get_custom_package_version"
  signature: ""
  returns: string
  type: function
  imports:
    - "@packages/july.zip"
  meta:
    use_mixins:
      - snowpark_shared
Copy

Em seguida, importe seu pacote no manipulador de funções.

# functions.py
import july

def get_custom_package_version():
  return july.__VERSION__
Copy