Gerenciamento de dependências para o app Streamlit¶
Por padrão, os ambientes Streamlit in Snowflake vêm com o Python, o Streamlit e o Snowflake Snowpark instalados. A forma como você gerencia as dependências do seu app muda de acordo com o ambiente de tempo de execução escolhido:
Os tempos de execução de contêiner gerenciam pacotes com uv. É possível especificar dependências em um arquivo
pyproject.toml(recomendado) ourequirements.txt. Por padrão, o app não tem acesso a um índice de pacotes como PyPI. Portanto, se você quiser editar ou especificar as versões das dependências do app, você deve criar uma integração de acesso externo (EAI). Além disso, você pode instalar pacotes de arquivos wheel incluídos no diretório do projeto.Os tempos de execução do warehouse gerenciam pacotes com conda. Você pode especificar dependências usando um arquivo
environment.ymlou o seletor de pacotes integrado no Snowsight. Você só pode instalar pacotes listados no canal Snowflake Anaconda.
Para saber como adicionar ou editar arquivos no app implantado, consulte Edição de um aplicativo Streamlit implantado.
Fontes de dependência compatíveis |
Tempo de execução de warehouse |
Tempo de execução de contêiner |
|---|---|---|
PyPI ou outros índices de pacotes externos «simples» |
Não |
Sim (com EAI) |
Canal Snowflake Anaconda |
Sim, com limitações nas versões do Streamlit |
Não |
Estágio interno |
Não |
Sim, mas apenas por meio de caminhos relativos nos arquivos de origem do app |
Repositório de artefatos do Snowflake ( |
Não |
Não |
Versões compatíveis do Python¶
Os aplicativos Streamlit in Snowflake recém-criados são executados no Python 3.11 por padrão.
Para tempos de execução de contêiner, o Python 3.11 é a única versão compatível por enquanto.
Para tempos de execução de warehouse, você pode escolher entre o Python 3.9, 3.10 e 3.11.
Versões compatíveis do Streamlit¶
Os apps Streamlit in Snowflake recém-criados usam a versão com suporte mais recente do Streamlit disponível no ambiente de tempo de execução deles. Quando uma nova versão do Streamlit é lançada, pode haver um atraso até a nova versão se tornar padrão.
Para tempos de execução de contêiner, a versão mínima necessária do Streamlit é 1.50. Você pode usar qualquer versão posterior do Streamlit, incluindo as
streamlit-nightly.Importante
As versões
streamlit-nightlysão experimentais. Para obter mais informações, consulte Nightly releases na documentação do Streamlit.Você pode usar imediatamente a versão mais recente do Streamlit instalando-a de um índice de pacotes.
Para tempos de execução de warehouse, você está limitado a um subconjunto de versões a partir da 1.22.0. As versões
streamlit-nightlynão são compatíveis.Não é possível usar imediatamente a versão mais recente do Streamlit em um tempo de execução de warehouse.
Para evitar atualizações inesperadas de pacotes, configure as dependências do seu app conforme descrito nesta página.
Versões compatíveis da biblioteca Streamlit em tempos de execução de warehouse¶
Streamlit in Snowflake suporta as seguintes versões da biblioteca de código aberto Streamlit:
1.51.0
1.50.0
1.49.1
1.48.0
1.47.0
1.46.1
1.45.1
1.45.0
1.44.1
1.44.0
1.42.0
1.39.0
1.35.0
1.31.1
1.29.0
1.26.0
1.22.0
Dependências não Python¶
Alguns pacotes Python exigem que bibliotecas do sistema não Python sejam instaladas no ambiente de tempo de execução. Por exemplo, o pacote Pillow requer bibliotecas para processar diferentes formatos de imagem.
Para dependências não Python em tempos de execução de contêiner, você só pode usar as bibliotecas do sistema pré-instaladas. A instalação de dependências não Python adicionais ainda não é compatível.
Para dependências não Python em tempos de execução de warehouse, algumas bibliotecas do sistema estão disponíveis no canal Snowflake Anaconda.
Práticas recomendadas para declarar dependências¶
Ao declarar as dependências do seu app, considere as seguintes práticas recomendadas:
Fixe as versões críticas do pacote.
Para tempos de execução de contêiner, use o operador
==nos arquivospyproject.tomlourequirements.txt.Para tempos de execução de warehouse, use o operador
=nos arquivosenvironment.yml.
Use intervalos de versões para flexibilidade.
Para tempos de execução de contêiner, use os operadores
<,<=,>=, and>nos arquivospyproject.tomlourequirements.txt.Para tempos de execução de warehouse, use sufixos de curinga
*nos arquivosenvironment.yml.
Mantenha as listas de dependências mínimas para reduzir o tempo de criação.
Teste as alterações de dependência em desenvolvimento antes da implantação.
Certifique-se de que suas dependências sejam compatíveis com a versão do Python em seu tempo de execução.
Ao migrar entre tempos de execução ou alterar seu gerenciador de pacotes, revise os nomes das dependências. Por exemplo, alguns pacotes têm nomes diferentes entre o Conda e o PyPI:
Pacote |
Nome no Conda |
Nome no PyPI |
|---|---|---|
Pillow |
|
|
OpenCV |
|
|
PyYAML |
|
|
Gerenciamento de dependências para tempos de execução de contêiner¶
Os apps de tempo de execução de contêiner exigem uma integração de acesso externo (External Access Integration, EAI) para instalar pacotes de um índice de pacotes externo como PyPI. Sem uma EAI, você só pode usar pacotes enviados com o tempo de execução ou incluídos nos arquivos de origem do seu app.
Mesmo se você quiser especificar apenas a versão do Streamlit, deverá incluir uma EAI com o app. Sem uma EAI, se você tentar usar especificadores de versão em pacotes pré-instalados, poderá encontrar um erro quando a imagem base de tempo de execução for atualizada. Isso ocorre porque seu especificador de versão pode não ser mais compatível com os pacotes pré-instalados.
Integrações de acesso externo para tempos de execução de contêiner¶
Para uma visão geral das integrações de acesso externo (EAIs), consulte Visão geral do acesso à rede externa.
PyPI EAI¶
PyPI é o índice de pacotes padrão usado pelo uv para instalar pacotes Python em seu tempo de execução de contêiner. Para criar uma EAI para PyPI, você precisa de uma regra de rede que permita o acesso a todos os domínios PyPI necessários. Normalmente, as EAIs são criadas e mantidas pelo administrador da sua conta ou pela equipe de segurança.
Por exemplo, os comandos SQL a seguir criam uma EAI (pypi_access_integration) para o PyPI e concede USAGE a uma função de desenvolvimento de app (app_developer_role).
CREATE OR REPLACE NETWORK RULE pypi_network_rule
MODE = EGRESS
TYPE = HOST_PORT
VALUE_LIST = ('pypi.org', 'pypi.python.org', 'pythonhosted.org', 'files.pythonhosted.org');
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION pypi_access_integration
ALLOWED_NETWORK_RULES = (pypi_network_rule)
ENABLED = true;
GRANT USAGE ON EXTERNAL ACCESS INTEGRATION pypi_access_integration TO ROLE app_developer_role;
Depois de criar a EAI, você precisará adicioná-la ao seu objeto Streamlit. Você pode fazer isso no Snowsight ou com o SQL:
Faça login no Snowsight.
No menu de navegação, clique em Projects » Streamlit e selecione seu app.
No canto superior direito, selecione
(mais opções) » App settings.Na caixa de diálogo App settings, selecione a guia External networks.
Na lista de EAIs disponíveis, selecione o EAI para PyPI.
Para salvar a alteração e fechar a caixa de diálogo, selecione Save.
ALTER STREAMLIT my_app SET
EXTERNAL_ACCESS_INTEGRATIONS = (pypi_access_integration);
Arquivos de dependência¶
Os tempos de execução de contêiner usam o uv para resolução de dependência rápida e confiável. O uv funciona como o pip para instalar pacotes Python, porém é mais eficiente e personalizável. Para obter mais informações sobre os recursos do uv, consulte a visão geral de recursos na documentação do uv.
Os tempos de execução de contêiner pesquisam arquivos de dependência no mesmo diretório que o arquivo de ponto de entrada do seu app. Se nenhum arquivo de dependência for encontrado, a pesquisa continuará subindo a árvore de diretórios até chegar à raiz do local de origem do seu app. O primeiro arquivo de dependência encontrado é usado para instalar as dependências do seu app.
Quando existem vários arquivos de dependência no mesmo diretório, eles são usados na seguinte ordem de precedência:
requirements.txt: lista os pacotes e as versões do Python necessários para seu app Streamlit, incluindo o próprio Streamlit. Você não pode configurar sua versão do Python comrequirements.txt.Para obter mais informações sobre o formato do
requirements.txt, consulte Requirements File Format na documentação do pip.pyproject.toml(recomendado): gerencia sua versão e as dependências do Python. Atualmente, somente a versão 3.11 do Python é compatível. Quando você fornece um arquivopyproject.toml, o uv gera um arquivouv.lockpara bloquear as versões de dependência. Esse arquivo de bloqueio será atualizado sempre que você atualizar as dependências. Você deverá usar opyproject.tomlse quiser usar um índice de pacotes diferente do PyPI.Para obter mais informações sobre o formato do
pyproject.toml, consulte Writing your pyproject.toml na documentação do Python.
O requirements.txt é a maneira mais simples de declarar as dependências do seu app e é fornecido para facilitar os primeiros passos. Entretanto, para um gerenciamento de dependências mais avançado, a Snowflake recomenda o uso do pyproject.toml. Por exemplo, ele permite que você bloqueie as versões de dependência para garantir que suas compilações sejam reproduzíveis.
Dica
Você pode instalar um pacote de qualquer URL se tiver a EAI necessária atribuída ao seu app. Os URLs que exigem autenticação devem oferecer suporte a credenciais incorporadas.
Você pode instalar um pacote do diretório do seu projeto usando um caminho relativo do arquivo de dependência para um arquivo wheel.
Se você usar especificadores de versão em pacotes pré-instalados, deverá ter uma EAI para um índice de pacotes para evitar erros quando a imagem base de tempo de execução for atualizada.
Geralmente, seus arquivos de ponto de entrada e de dependência estão na raiz do diretório do seu projeto. Entretanto, o arquivo de ponto de entrada pode estar em um subdiretório e o arquivo de dependência pode estar no mesmo diretório ou em qualquer pai até a raiz do seu projeto.
Por exemplo, o diretório do seu projeto pode ter uma das seguintes estruturas:
source_directory/
├── requirements.txt
└── streamlit_app.py
source_directory/
├── pyproject.toml
├── streamlit_app.py
└── uv.lock
source_directory/
├── pyproject.toml
├── subdirectory/
│ └── streamlit_app.py
└── uv.lock
source_directory/
└── subdirectory/
├── pyproject.toml
├── streamlit_app.py
└── uv.lock
Nota
O tempo de execução de contêiner usará o diretório que contém o arquivo de dependência como diretório de trabalho para o uv. Portanto, se você usar um caminho relativo para instalar um pacote dentre os arquivos de origem do app, o caminho deverá ser relativo ao local do arquivo de dependência. Para obter mais informações sobre a declaração de fontes de pacote, consulte Dependency sources na documentação do uv.
Exemplos de arquivos de dependência PyPI¶
O arquivo pyproject.toml deve incluir name e version para ter um formato válido para uv, mas os valores podem ser arbitrários. Use requires-python para definir a versão do Python, mesmo que os tempos de execução de contêiner sejam compatíveis apenas com o Python 3.11 por enquanto. Use dependencies para listar os pacotes Python para o tempo de execução de contêiner.
Dica
Instale o Streamlit como streamlit[snowflake] para incluir suas dependências do conector Snowflake (snowflake-snowpark-python).
Se você tem uma EAI para PyPI, o seguinte arquivo pyproject.toml declara a versão mínima do Python 3.11 e inclui cinco pacotes Python que serão instalados do PyPI:
[project]
name = "my-streamlit-app"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
"streamlit[snowflake]==1.50.0",
"pandas>=2.0.0",
"plotly>5.0.0",
"requests>2.0.0,<3.0.0"
]
Como alternativa ao pyproject.toml, você pode usar um arquivo requirements.txt para declarar as dependências do seu app. O seguinte requirements.txt contém os mesmos pacotes Python que o exemplo do pyproject.toml anterior:
streamlit[snowflake]==1.50.0
pandas>=2.0.0
plotly>5.0.0
requests>2.0.0,<3.0.0
Nota
Para fixar uma versão de um pacote, você deve usar o operador ==. Para especificar um intervalo de versões, você deve usar os operadores <, <=, >=, and >. Por exemplo, pandas>=2.0.0,<3.0.0 instala qualquer versão entre 2.0.0 e 2.99.99. Para obter mais informações, consulte Dependency specifiers.
Exemplos de arquivos de dependência JFrog¶
Para maior segurança, seu administrador de sistema pode exigir que você use um índice de pacotes selecionado ou privado, como o JFrog Artifactory. Esse é um recurso exclusivo para tempos de execução de contêiner. Com JFrog, você pode criar um índice de pacotes público ou privado que usa o PyPI como proxy ou hospeda pacotes personalizados. Dessa forma, você pode controlar quais pacotes e versões estão disponíveis para seus apps Streamlit.
Para especificar um índice de pacotes, você deve usar o pyproject.toml. Para obter mais informações, consulte Using alternative package indexes na documentação do uv.
O seguinte arquivo pyproject.toml declara a versão mínima do Python 3.11, inclui cinco pacotes Python e especifica o JFrog como índice de pacotes que usa o PyPI como proxy:
[project]
name = "my-streamlit-app"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
"streamlit[snowflake]==1.50.0",
"pandas>=2.0.0",
"plotly>=5.0.0",
"requests>2.0.0,<3.0.0"
]
[[tool.uv.index]]
name = "jfrog"
url = "<server_name>.jfrog.io/artifactory/api/pypi/<repository_key>/simple"
default = true
Se o seu repositório JFrog requer autenticação, gere um token de acesso pessoal ou obtenha um token com escopo do administrador do sistema JFrog. Em seguida, inclua o token no URL. Não use sua senha do JFrog no URL. Neste caso, a tabela [[tool.uv.index]] no exemplo anterior será substituída pelo seguinte:
[[tool.uv.index]]
name = "jfrog"
url = "https://<username>:<access_token>@<server_name>.jfrog.io/artifactory/api/pypi/<repository_key>/simple"
default = true
Gerenciamento de dependências para tempos de execução de warehouse¶
Os tempos de execução de warehouse usam o conda para gerenciar as dependências do seu app. Você pode declarar as dependências usando um arquivo environment.yml ou o seletor de pacotes integrado no Snowsight. As dependências são instaladas do canal Snowflake Anaconda, que inclui os pacotes Python e algumas bibliotecas do sistema não Python.
O canal Snowflake Anaconda contém mais versões do Streamlit do que as compatíveis com os tempos de execução de warehouse Streamlit in Snowflake. Para evitar problemas de compatibilidade, use apenas versões do Streamlit listadas em Versões compatíveis da biblioteca Streamlit em tempos de execução de warehouse. Caso contrário, você pode instalar qualquer outro pacote disponível no canal Snowflake Anaconda.
Arquivo environment.yml¶
Para instalar dependências em seu ambiente de tempo de execução de warehouse usando um arquivo environment.yml, crie ou edite o arquivo na raiz do local de origem do seu app. Se você não fornecer um arquivo environment.yml, o Snowflake usará apenas os pacotes pré-instalados para seu ambiente selecionado. Para obter mais informações sobre a estrutura do environment.yml, consulte a documentação do conda.
As seguintes limitações se aplicam ao usar arquivos environment.yml em tempos de execução de warehouse Streamlit in Snowflake:
Você só pode usar o canal Snowflake Anaconda para instalar pacotes.
Você só pode usar as versões do Streamlit listadas em Versões compatíveis da biblioteca Streamlit em tempos de execução de warehouse.
Você não pode declarar pacotes
pipna seçãodependencies, incluindo caminhos relativos para pacotes locais.
O seguinte environment.yml declara o Python 3.11 e cinco pacotes Python:
name: my-streamlit-app
channels:
- snowflake
dependencies:
- python=3.11
- streamlit=1.50.0
- pandas=2.*
- plotly=5.0.*
- requests
- snowflake-snowpark-python
A Snowflake recomenda fixar uma versão do Streamlit para evitar que o aplicativo seja atualizado quando uma nova versão do Streamlit estiver disponível no Snowflake Anaconda Channel.
Nota
Para fixar uma versão de um pacote, você deve usar o operador =. Para especificar um intervalo de versões, você deve usar os curingas *. Por exemplo, pandas=2.* instala qualquer versão do pandas entre 2.0.0 e 2.99.99.
Desenvolvimento local com conda¶
Ao desenvolver seu app de tempo de execução de warehouse localmente com o conda, você deve incluir detalhes adicionais no arquivo environment.yml para garantir que as dependências sejam instaladas corretamente.
Identifique o canal Snowflake Anaconda por seu URL:
https://repo.anaconda.com/pkgs/snowflake.Bloqueie o canal padrão.
No arquivo environment.yml, use os dois canais a seguir:
channels:
- https://repo.anaconda.com/pkgs/snowflake
- nodefaults
Se defaults aparecer no arquivo ~/.condarc, comente-o:
channels:
# - defaults
Seletor de pacotes do Snowsight¶
Além de editar o arquivo environment.yml diretamente para seu app de tempo de execução de warehouse, você pode usar o seletor de pacotes integrado no Snowsight para adicionar ou remover pacotes do ambiente do app. O seletor de pacotes só está disponível para apps que usam tempos de execução de warehouse. Além disso, o seletor de pacotes exibe apenas pacotes compatíveis com a versão atual do Python do seu app. Algumas bibliotecas do sistema independentes da versão do Python podem não ser mostradas no seletor de pacotes e devem ser adicionadas manualmente ao environment.yml.
Faça login no Snowsight.
No menu de navegação, clique em Projects » Streamlit e selecione seu app Streamlit.
No canto superior direito, selecione Edit.
No canto superior esquerdo do painel do editor, selecione Packages.
Um painel suspenso é exibido com a guia Anaconda Packages selecionada.
Execute qualquer uma das seguintes ações:
Para definir a versão do Python, no seletor de Python version, escolha a versão desejada.
Para adicionar um pacote, use a barra de pesquisa para encontrar pacotes por nome e selecione o pacote desejado.
Para remover um pacote, na seção Installed Packages, selecione o ícone x à direita da versão do pacote.
Para definir a versão de um pacote instalado, na seção Installed Packages, use o seletor de versões ao lado do nome do pacote.
O Snowflake atualiza o arquivo
environment.ymlautomaticamente e reinicia seu app. Se você o arquivoenvironment.ymlestiver aberto no editor, atualize a página para ver as alterações.