Gérer les dépendances de votre application Streamlit

Par défaut, les environnements Streamlit in Snowflake sont livrés avec l’installation de Python, Streamlit et Snowflake Snowpark. La manière dont vous gérez les dépendances de votre application diffère en fonction de l’environnement d’exécution que vous choisissez :

  • Les exécutions de conteneurs gèrent les paquets avec uv. Vous pouvez spécifier des dépendances dans un fichier pyproject.toml (recommandé) ou requirements.txt. Par défaut, votre application n’a pas accès à un index de paquets comme PyPI. Par conséquent, si vous souhaitez modifier ou spécifier les versions des dépendances de votre application, vous devez créer une intégration d’accès externe (EAI). De plus, vous pouvez installer des paquets à partir de fichiers de wheel inclus dans votre répertoire de projet.

  • Les exécutions d’entrepôt gèrent les paquets avec conda. Vous pouvez spécifier des dépendances en utilisant un fichier environment.yml ou le sélecteur de paquets intégré dans Snowsight. Vous ne pouvez installer que les paquets répertoriés dans le canal Anaconda de Snowflake.

Pour savoir comment ajouter ou modifier des fichiers dans votre appli déployée, voir Modification d’une application Streamlit déployée.

Sources de dépendance prises en charge

Exécution d’entrepôts

Exécution de conteneurs

PyPI ou autres indexes de paquets `« simples » <https://peps.python.org/pep-0503/>`_externes

Non

Oui (avec EAI)

Canal Anaconda de Snowflake

Oui, avec des limites sur les versions Streamlit

Non

Zone de préparation interne

Non

Oui, mais uniquement via des chemins relatifs dans les fichiers sources de l’application

Dépôt d’artefacts Snowflake (snowflake.snowpark.pypi_shared_repository)

Non

Non

Versions de Python prises en charge

Les applications Streamlit in Snowflake nouvellement créées s’exécutent en Python 3.11 par défaut.

  • Pour les environnements d’exécution des conteneurs, Python 3.11 est la seule version prise en charge pour le moment.

  • Pour les environnements d’exécution d’entrepôt, vous pouvez choisir entre Python 3.9, 3.10 et 3.11.

Versions prises en charge de Streamlit

Les nouvelles applications Streamlit in Snowflake créées utilisent la dernière version prise en charge de Streamlit disponible dans leur environnement d’exécution. Lorsqu’une nouvelle version de Streamlit est publiée, il peut y avoir un délai avant que la nouvelle version devienne la version par défaut.

  • Pour les environnements d’exécution de conteneurs, la version minimale requise de Streamlit est 1.50. Vous pouvez utiliser toute version ultérieure de Streamlit, y compris les versions streamlit-nightly.

    Important

    Les versions streamlit-nightly sont expérimentales. Pour plus d’informations, voir les versions Nightly dans la documentation Streamlit.

    Vous pouvez immédiatement utiliser la dernière version de Streamlit en l’installant à partir d’un index de paquets.

  • Pour les environnements d’exécution d’entrepôt, vous êtes limité à un sous-ensemble de versions à partir de la version 1.22.0. Les versions streamlit-nightly ne sont pas prises en charge.

    Il n’est pas possible d’utiliser immédiatement la dernière version de Streamlit dans un environnement d’exécution d’entrepôt.

Pour éviter des mises à niveau inattendues des paquets, configurez les dépendances de votre application comme décrit dans cette page.

Versions prises en charge de la bibliothèque Streamlit dans les environnements d’exécution d’entrepôt

Streamlit in Snowflake prend en charge les versions suivantes de la bibliothèque open-source 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

Dépendances non-Python

Certains paquets Python nécessitent l’installation de bibliothèques système non-Python dans l’environnement d’exécution. Par exemple, le paquet Pillow nécessite des bibliothèques pour gérer différents formats d’images.

  • Pour les dépendances non-Python dans les environnements d’exécution des conteneurs, vous ne pouvez utiliser que les bibliothèques système préinstallées. L’installation de dépendances supplémentaires non-Python n’est pas encore prise en charge.

  • Pour les dépendances non-Python dans les environnements d’exécution d’entrepôt, certaines bibliothèques système sont disponibles dans le canal Anaconda de Snowflake.

Bonnes pratiques pour la déclaration des dépendances

Lorsque vous déclarez les dépendances de votre application, tenez compte des meilleures pratiques suivantes :

  • Épinglez les versions critiques des paquets.

    • Pour les environnements d’exécution des conteneurs, utilisez l’opérateur == dans les fichiers pyproject.toml ou requirements.txt.

    • Pour les environnements d’exécution d’entrepôt, utilisez l’opérateur = dans les fichiers environment.yml.

  • Utilisez des plages de versions pour plus de flexibilité.

    • Pour les environnements d’exécution des conteneurs, utilisez les opérateurs <, <=, >=, and > dans les fichiers pyproject.toml ou requirements.txt.

    • Pour les environnements d’exécution d’entrepôt, utilisez les suffixes génériques * dans les fichiers environment.yml.

  • Maintenez les listes de dépendances à un niveau minimal pour réduire le temps de construction.

  • Testez les changements de dépendance dans le développement avant de les déployer.

  • Assurez-vous que vos dépendances sont compatibles avec la version de Python dans votre environnement d’exécution.

Lors de la migration entre les environnements d’exécution ou de la modification de votre gestionnaire de paquets, vérifiez les noms de vos dépendances. Par exemple, certains paquets ont des noms différents entre Conda et PyPI :

Paquet

Nom Conda

Nom PyPI

Pillow

pillow

Pillow

OpenCV

opencv

opencv-python

PyYAML

pyyaml

PyYAML

Gestion des dépendances pour les environnements d’exécution des conteneurs

Les applications d’exécution de conteneurs nécessitent une intégration d’accès externe (EAI) pour installer des paquets à partir d’un index de paquets externe comme PyPI. Sans une EAI, vous ne pouvez utiliser que les paquets livrés avec le runtime ou inclus dans les fichiers sources de votre appli.

Même si vous ne voulez spécifier que la version de Streamlit, vous devez inclure une EAI avec votre appli. Sans une EAI, si vous essayez d’utiliser des spécificateurs de version sur des paquets préinstallés, vous risquez de rencontrer une erreur lorsque l’image de base de l’environnement d’exécution est mise à jour. En effet, votre spécificateur de version risque de ne plus être compatible avec les paquets préinstallés.

Intégrations d’accès externes pour les environnements d’exécution de conteneurs

Pour une vue d’ensemble des intégrations d’accès externe (EAIs), voir Vue d’ensemble de l’accès au réseau externe.

PyPI EAI

PyPI est l’index de paquets par défaut utilisé par uv pour installer des paquets Python dans votre environnement d’exécution de conteneur. Pour créer une EAI pour PyPI, vous avez besoin d’une règle réseau qui autorise l’accès à tous les domaines PyPI nécessaires. Les EAIs sont généralement créées et gérées par votre administrateur de compte ou votre équipe de sécurité.

Par exemple, les commandes SQL suivantes créent une EAI (pypi_access_integration) pour PyPI et accordent USAGE à un rôle de développement d’applis (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;
Copy

Après avoir créé l’EAI, vous devez l’ajouter à votre objet Streamlit. Vous pouvez faire cela dans Snowsight ou avec SQL:

  1. Connectez-vous à Snowsight.

  2. Dans le menu de navigation, sélectionnez Projects » Streamlit, puis sélectionnez votre application.

  3. Dans le coin supérieur droit, sélectionnez. Trois points verticaux indiquant plus d'options (plus d’options) » App settings.

  4. Dans la boîte de dialogue App settings, sélectionnez l’onglet External networks.

  5. Dans la liste des EAIs disponibles, sélectionnez l’EAI pour PyPI.

  6. Pour enregistrer la modification et fermer la boîte de dialogue, sélectionnez Save.

Fichiers de dépendance

Les environnements d’exécution des conteneurs utilisent uv pour une résolution rapide et fiable des dépendances. uv fonctionne comme pip pour installer des paquets Python, mais il est plus performant et personnalisable. Pour plus d’informations sur les fonctions d’uv, voir la vue d’ensemble des fonctionnalités dans la documentation d’uv.

Les environnements d’exécution des conteneurs recherchent les fichiers de dépendances dans le même répertoire que le fichier de point d’entrée de votre application. Si aucun fichier de dépendance n’est trouvé, la recherche continue dans l’arborescence des répertoires jusqu’à atteindre la racine de l’emplacement source de votre application. Le premier fichier de dépendance trouvé est utilisé pour installer les dépendances de votre appli.

Lorsque plusieurs fichiers de dépendances existent dans le même répertoire, ils sont utilisés dans l’ordre de préséance suivant :

  • requirements.txt : Répertorie les paquets Python et les versions requis par votre application Streamlit, y compris Streamlit lui-même. Vous ne pouvez pas configurer votre version de Python avec requirements.txt.

    Pour plus d’informations sur le format de requirements.txt, voir Formats de fichier requis dans la documentation de pip.

  • pyproject.toml (recommandé) : gère votre version de Python et vos dépendances. Actuellement, seule la version 3.11 de Python est prise en charge. Lorsque vous fournissez un fichier pyproject.toml, uv génère un fichier uv.lock pour verrouiller les versions de vos dépendances. Ce fichier de verrouillage sera mis à jour chaque fois que vous mettez à jour vos dépendances. Vous devez utiliser pyproject.toml si vous souhaitez utiliser un index de paquets différent de PyPI.

    Pour plus d’informations sur le format des pyproject.toml, voir Écrire votre pyproject.toml dans la documentation Python.

requirements.txt est le moyen le plus simple de déclarer les dépendances de votre appli et est fourni pour faciliter la prise en main. Cependant, pour une gestion des dépendances plus avancée, Snowflake recommande d’utiliser pyproject.toml à la place. Par exemple, cela vous permet de verrouiller les versions des dépendances pour garantir que vos constructions soient reproductibles.

Astuce

  • Vous pouvez installer un paquet à partir de n’importe quelle URL si l’EAI nécessaire est attribuée à votre application. Les URLs exigeant une authentification doivent prendre en charge les identifiants de connexion intégrés.

  • Vous pouvez installer un paquet à partir de votre répertoire de projet en utilisant un chemin relatif du fichier de dépendance vers un fichier wheel.

  • Si vous utilisez des spécificateurs de version sur des paquets préinstallés, une EAI doit être associée à un index de paquets pour éviter les erreurs lorsque l’image de base de l’environnement d’exécution est mise à jour.

Il arrive souvent que votre fichier de point d’entrée et votre fichier de dépendance se trouvent à la racine du répertoire de votre projet. Cependant, votre fichier de point d’entrée peut se trouver dans un sous-répertoire et votre fichier de dépendance peut se trouver dans le même répertoire ou dans tout parent jusqu’à la racine de votre projet.

Par exemple, votre répertoire de projet peut avoir l’une des structures suivantes :

source_directory/
├── requirements.txt
└── streamlit_app.py
Copy
source_directory/
├── pyproject.toml
├── streamlit_app.py
└── uv.lock
Copy
source_directory/
├── pyproject.toml
├── subdirectory/
│   └── streamlit_app.py
└── uv.lock
Copy
source_directory/
└── subdirectory/
    ├── pyproject.toml
    ├── streamlit_app.py
    └── uv.lock
Copy

Note

L’environnement d’exécution de conteneur utilisera le répertoire contenant le fichier de dépendance comme répertoire de travail pour uv. Par conséquent, si vous utilisez un chemin relatif pour installer un paquet à partir de vos fichiers sources d’application, le chemin doit être relatif à l’emplacement du fichier de dépendance. Pour plus d’informations sur la déclaration des sources de paquets, voir Sources de dépendance dans la documentation d’uv.

Exemples de fichiers de dépendances PyPI

Votre fichier pyproject.toml doit inclure un name et une version dans un format valide pour uv, mais leurs valeurs peuvent être arbitraires. Utilisez exigences-python pour définir votre version de Python, même si les environnements d’exécution des conteneurs ne prennent en charge que Python 3.11 pour le moment. Utilisez dependencies pour répertorier vos paquets Python pour l’environnement d’exécution de votre conteneur.

Astuce

Installez Streamlit comme streamlit[snowflake] pour inclure les dépendances de son connecteur Snowflake (snowflake-snowpark-python).

Si vous avez un EAI pour PyPI, le fichier pyproject.toml suivant déclare au minimum la version Python 3.11 et inclut cinq paquets Python qui seront installés à partir de 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"
]
Copy

Comme alternative à pyproject.toml, vous pouvez utiliser un fichier requirements.txt pour déclarer les dépendances de votre appli. Le fichier requirements.txt suivant contient les mêmes paquets Python que l’exemple de pyproject.toml précédent :

streamlit[snowflake]==1.50.0
pandas>=2.0.0
plotly>5.0.0
requests>2.0.0,<3.0.0
Copy

Note

Pour épingler une version d’un paquet, vous devez utiliser l’opérateur``==``. Pour spécifier une plage de versions, vous devez utiliser les opérateurs <, <=, >= et >. Par exemple, Pandas>=2.0.0,<3.0.0 installera toute version comprise entre 2.0.0 et 2.99.99. Pour plus d’informations, voir. Spécificateurs de dépendance.

Exemples de fichiers de dépendances JFrog

Pour plus de sécurité, votre administrateur système peut vous demander d’utiliser un index de paquets sélectionné ou privé comme JFrog Artifactory. Il s’agit d’une fonction exclusive pour les environnements d’exécution de conteneurs. Avec JFrog, vous pouvez créer un index de paquets public ou privé qui fait office de proxy de PyPI ou héberge des paquets personnalisés. Cela vous permet de contrôler les paquets et les versions disponibles pour vos applications Streamlit.

Pour spécifier un index de paquets, vous devez utiliser pyproject.toml. Pour plus d’informations, voir. Utilisation d’index de paquets alternatifs dans la documentation d’uv.

Le fichier pyproject.toml suivant déclare au minimum la version Python 3.11, comprend cinq paquets Python et spécifie JFrog comme index de paquets qui fait office de proxy de 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"
]

[[tool.uv.index]]
name = "jfrog"
url = "<server_name>.jfrog.io/artifactory/api/pypi/<repository_key>/simple"
default = true
Copy

Si votre dépôt JFrog nécessite une authentification, générez un jeton d’accès personnel ou obtenez un jeton restreint auprès de votre administrateur système JFrog. Ensuite, incluez le jeton dans l’URL. N’utilisez pas votre mot de passe JFrog dans l’URL. Dans ce cas, la table [[tool.uv.index]] de l’exemple précédent serait remplacée par ce qui suit :

[[tool.uv.index]]
name = "jfrog"
url = "https://<username>:<access_token>@<server_name>.jfrog.io/artifactory/api/pypi/<repository_key>/simple"
default = true
Copy

Gestion des dépendances pour les environnements d’exécution d’entrepôt

Les environnements d’exécution d’entrepôt utilisent conda pour gérer les dépendances de votre application. Vous pouvez déclarer vos dépendances en utilisant un fichier environment.yml ou le sélecteur de paquets intégré dans Snowsight. Les dépendances sont installées à partir du Canal Anaconda de Snowflake, qui comprend à la fois des paquets Python et des bibliothèques système non-Python.

Le canal Anaconda de Snowflake contient plus de versions de Streamlit que celles prises en charge dans les environnements d’exécution d’entrepôt Streamlit in Snowflake. Pour éviter les problèmes de compatibilité, n’utilisez que les versions de Streamlit répertoriées dans Versions prises en charge de la bibliothèque Streamlit dans les environnements d’exécution d’entrepôt. Sinon, vous pouvez installer tout autre paquet disponible dans le canal Anaconda de Snowflake.

fichier environment.yml

Pour installer des dépendances dans l’environnement d’exécution de votre entrepôt à l’aide d’un fichier environment.yml, créez ou modifiez le fichier à la racine de l’emplacement source de votre application. Si vous ne fournissez pas de fichier environment.yml, Snowflake utilise uniquement les paquets préinstallés pour votre environnement sélectionné. Pour plus d’informations sur la structure de environment.yml, voir la documentation de conda ` <https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#creating-an-environment-file-manually>`_.

Les limites suivantes s’appliquent lors de l’utilisation de fichiers environment.yml dans les environnements d’exécution d’entrepôt Streamlit in Snowflake :

Le fichier environment.yml suivant déclare Python 3.11 et cinq paquets Python :

name: my-streamlit-app
channels:
  - snowflake
dependencies:
  - python=3.11
  - streamlit=1.50.0
  - pandas=2.*
  - plotly=5.0.*
  - requests
  - snowflake-snowpark-python
Copy

Snowflake recommande d’épingler une version de Streamlit pour éviter que l’application ne soit mise à niveau lorsqu’une nouvelle version de Streamlit est disponible dans le canal Anaconda de Snowflake.

Note

Pour épingler une version d’un paquet, vous devez utiliser l’opérateur``=``. Pour spécifier une plage de versions, vous devez utiliser les caractères génériques *. Par exemple, pandas=2.* installera toute version de pandas comprise entre 2.0.0 et 2.99.99.

Développement local avec conda

Lorsque vous développez votre application d’exécution d’entrepôt localement avec conda, vous devez inclure des détails supplémentaires dans votre fichier environment.yml pour que les dépendances soient installées correctement.

  • Identifiez le canal Anaconda de Snowflake par son URL: https://repo.anaconda.com/pkgs/snowflake.

  • Bloquez le canal par défaut.

Dans votre fichier environment.yml, utilisez les deux canaux suivants :

channels:
  - https://repo.anaconda.com/pkgs/snowflake
  - nodefaults
Copy

Si defaults apparaît dans votre fichier ~/.condarc, commentez-le :

channels:
  # - defaults
Copy

Sélecteur de paquets Snowsight

Outre la modification du fichier environment.yml directement pour votre application d’exécution d’entrepôt, vous pouvez également utiliser le sélecteur de paquets intégré dans Snowsight pour ajouter ou supprimer des paquets dans l’environnement de votre application. Le sélecteur de paquets n’est disponible que pour les applications utilisant des environnements d’exécution d’entrepôt. En outre, le sélecteur de paquets n’affiche que les paquets compatibles avec la version Python actuelle de votre application. Certaines bibliothèques système qui sont indépendantes de la version Python peuvent ne pas être affichées dans le sélecteur de paquets et doivent être ajoutées manuellement à environment.yml.

  1. Connectez-vous à Snowsight.

  2. Dans le menu de navigation, sélectionnez Projects, » Streamlit puis votre application Streamlit.

  3. Dans le coin supérieur droit, sélectionnez Edit.

  4. Dans le coin supérieur gauche du panneau de l’éditeur, sélectionnez Packages.

    Un volet déroulant apparaît avec l’onglet Anaconda Packages sélectionné.

  5. Effectuez une des actions suivantes :

  • Pour définir la version de Python, dans le sélecteur Python version, choisissez la version souhaitée.

  • Pour ajouter un paquet, utilisez la barre de recherche pour rechercher des paquets par leur nom, puis sélectionnez le paquet souhaité.

  • Pour supprimer un paquet, dans la section Installed Packages, sélectionnez l’cône x à droite de la version du paquet.

  • Pour définir la version d’un paquet installé, dans la section Installed Packages, utilisez le sélecteur de version à côté du nom du paquet.

Snowflake met automatiquement à jour le fichier environment.yml et redémarre votre application. Si le fichier” environment.yml est ouvert dans l’éditeur, actualisez la page pour voir les modifications.