Verwalten von Abhängigkeiten für Ihre Streamlit-App

Standardmäßig ist in Streamlit in Snowflake-Umgebungen Python, Streamlit und Snowflake Snowpark installiert. Die Art und Weise, wie Sie die Abhängigkeiten Ihrer App verwalten, hängt von der von Ihnen gewählten Laufzeitumgebung ab:

  • Container Runtimes verwalten Pakete mit uv. Sie können Abhängigkeiten in einer pyproject.toml (empfohlen) oder requirements.txt-Datei angeben. Standardmäßig hat Ihre App keinen Zugriff auf einen Paketindex wie PyPI. Wenn Sie also die Versionen der Abhängigkeiten Ihrer App bearbeiten oder angeben möchten, müssen Sie eine Integration für externen Zugriff (EAI) erstellen. Außerdem können Sie Pakete aus Wheel-Dateien installieren, die sich in Ihrem Projektverzeichnis befinden.

  • Warehouse Runtimes verwalten Pakete mit conda. Sie können Abhängigkeiten mit einer environment.yml-Datei oder der integrierten Paketauswahl in Snowsight angeben. Sie können nur Pakete aus dem Snowflake Anaconda-Kanal installieren.

Unter Bearbeiten einer bereitgestellten Streamlit-App erfahren Sie, wie Sie in Ihrer bereitgestellten App Dateien hinzufügen oder bearbeiten können.

Unterstützte Abhängigkeitsquellen

Warehouse Runtime

Container Runtime

PyPI oder andere externe „einfache“ Paketindizes

Nein

Ja (mit EAI)

Snowflake Anaconda-Kanal

Ja, mit Einschränkungen bei Streamlit-Versionen

Nein

Interner Stagingbereich

Nein

Ja, aber nur über relative Pfade innerhalb der Quelldateien der App

Snowflake Artefakt-Repository (snowflake.snowpark.pypi_shared_repository)

Nein

Nein

Unterstützte Versionen von Python

Neu erstellte Streamlit in Snowflake-Anwendungen laufen standardmäßig in Python 3.11.

  • Für Container Runtimes ist Python 3.11 derzeit die einzige unterstützte Version.

  • Bei Warehouse Runtimes können Sie zwischen Python 3.9, 3.10 und 3.11 wählen.

Unterstützte Versionen von Streamlit

Neu erstellte Streamlit in Snowflake-Apps verwenden die neueste unterstützte Version von Streamlit, die in ihrer Runtime-Umgebung verfügbar ist. Wenn eine neue Version von Streamlit veröffentlicht wird, kann es zu Verzögerungen kommen, bevor die neue Version zur Standardversion wird.

  • Für Container Runtimes beträgt die erforderliche Mindestversion von Streamlit 1.50. Sie können jede neuere Version von Streamlit verwenden, einschließlich streamlit-nightly-Versionen.

    Wichtig

    streamlit-nightly-Versionen sind experimentell. Weitere Informationen dazu finden Sie unter Nightly-Releases in der Streamlit-Dokumentation.

    Sie können die neueste Streamlit-Version sofort verwenden, indem Sie sie aus einem Paketindex installieren.

  • Bei Warehouse Runtimes sind Sie auf eine Teilmenge von Versionen ab 1.22.0 beschränkt. streamlit-nightly-Versionen werden nicht unterstützt.

    Es ist nicht möglich, sofort die neueste Streamlit-Version in einer Warehouse Runtime zu verwenden.

Um unerwartete Paket-Upgrades zu vermeiden, konfigurieren Sie die Abhängigkeiten Ihrer App wie auf dieser Seite beschrieben.

Unterstützte Versionen der Streamlit-Bibliothek in Warehouse Runtimes

Streamlit in Snowflake unterstützt die folgenden Versionen der Streamlit-Open-Source-Bibliothek:

  • 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

Nicht-Python-Abhängigkeiten

Einige Python-Pakete erfordern, dass in der Runtime-Umgebung Nicht-Python-Systembibliotheken installiert sind. Beispiel: Das Pillow-Paket erfordert Bibliotheken für die Verarbeitung verschiedener Bildformate.

  • Für Nicht-Python-Abhängigkeiten in Container Runtimes können Sie nur die vorinstallierten Systembibliotheken verwenden. Die Installation zusätzlicher Nicht-Python-Abhängigkeiten wird noch nicht unterstützt.

  • Für Nicht-Python-Abhängigkeiten in Warehouse Runtimes stehen einige Systembibliotheken im Snowflake Anaconda-Kanal zur Verfügung.

Best Practices für das Deklarieren von Abhängigkeiten

Wenn Sie die Abhängigkeiten Ihrer App deklarieren, beachten Sie die folgenden Best Practices:

  • Sie sollten kritische Paketversionen anheften.

    • Für Container Runtimes verwenden Sie den ==-Operator in pyproject.toml oder requirements.txt-Dateien.

    • Für Warehouse Runtimes verwenden Sie den =-Operator in environment.yml-Dateien.

  • Verwenden Sie Versionsbereiche für mehr Flexibilität.

    • Für Container Runtimes verwenden Sie die Operatoren <, <=, >=, and > in pyproject.toml oder requirements.txt-Dateien.

    • Für Warehouse Runtimes verwenden Sie *-Platzhaltersuffixe in environment.yml-Dateien.

  • Halten Sie die Abhängigkeitslisten minimal, um die Erstellungszeit zu verkürzen.

  • Testen Sie Abhängigkeitsänderungen in der Entwicklung, bevor Sie sie bereitstellen.

  • Stellen Sie sicher, dass Ihre Abhängigkeiten mit der Python-Version Ihrer Laufzeitumgebung kompatibel sind.

Wenn Sie zwischen den Runtimes migrieren oder Ihren Paketmanager ändern, überprüfen Sie die Namen der Abhängigkeiten. Beispielsweise haben einige Pakete unterschiedliche Namen zwischen Conda und PyPI:

Paket

Conda-Name

PyPI-Name

Pillow

pillow

Pillow

OpenCV

opencv

opencv-python

PyYAML

pyyaml

PyYAML

Verwalten von Abhängigkeiten für Container Runtimes

Container Runtime-Apps erfordern eine externe Zugriffsintegration (EAI), um Pakete aus einem externen Paketindex wie PyPI zu installieren. Ohne EAI können Sie nur Pakete verwenden, die mit der Runtime geliefert wurden oder in den Quelldateien Ihrer App enthalten sind.

Auch wenn Sie nur die Version von Streamlit angeben möchten, müssen Sie eine EAI in Ihre App integrieren. Wenn Sie ohne EAI versuchen, Versionsspezifizierer für vorinstallierte Pakete zu verwenden, tritt möglicherweise ein Fehler auf, wenn das Runtime-Basis-Image aktualisiert wird. Das liegt daran, dass Ihr Versionsspezifizierer möglicherweise nicht mehr mit den vorinstallierten Paketen kompatibel ist.

Externe Zugriffsintegrationen für Container Runtimes

Für einen allgemeinen Überblick über externe Zugriffsintegrationen (EAIs) siehe Übersicht über externen Netzwerkzugriff.

PyPI-EAI

PyPI ist der Standard-Paketindex, der von Informationen zur Installation von Python-Paketen in Ihrer Container Runtime verwendet wird. Um eine EAI für PyPI zu erstellen, benötigen Sie eine Netzwerkregel, die den Zugriff auf alle erforderlichen PyPI-Domänen zulässt. EAIs werden in der Regel von Ihrem Kontoadministrator oder Sicherheitsteam erstellt und gepflegt.

Beispielsweise erstellen folgende SQL-Befehle eine EAI (pypi_access_integration) in PyPI und ermöglich USAGE für eine App-Entwicklungsrolle (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

Nach dem Erstellen der EAI müssen Sie diese zu Ihrem Streamlit-Objekt hinzufügen. Sie können dies in Snowsight oder mit SQL tun:

  1. Melden Sie sich bei Snowsight an.

  2. Wählen Sie im Navigationsmenü die Option Projects » Streamlit und dann Ihre App aus.

  3. Wählen Sie in der rechten oberen Ecke die Option Drei vertikale Punkte, die weitere Optionen anzeigen (weitere Optionen) » App settings aus.

  4. Wählen Sie im Dialogfeld App settings die Registerkarte External networks aus.

  5. Aus der Liste der verfügbaren EAIs wählen Sie die EAI für PyPI aus.

  6. Um die Änderung zu speichern und das Dialogfeld zu schließen, wählen Sie Save aus.

Abhängigkeitsdateien

Container Runtimes verwenden „uv“ für eine schnelle und zuverlässige Auflösung von Abhängigkeiten. uv funktioniert wie pip, um Python-Pakete zu installieren, aber es ist leistungsfähiger und besser anpassbar. Weitere Informationen zu den uv-Features finden Sie in der Übersicht Features in der uv-Dokumentation.

Container Runtimes suchen nach Abhängigkeitsdateien im gleichen Verzeichnis wie die Einstiegspunkt-Datei Ihrer App. Wenn keine Abhängigkeitsdateien gefunden werden, wird die Suche im Verzeichnisstrukturbaum fortgesetzt, bis das Stammverzeichnis des Quellspeicherorts Ihrer App erreicht ist. Die erste gefundene Abhängigkeitsdatei wird verwendet, um die Abhängigkeiten Ihrer App zu installieren.

Wenn im selben Verzeichnis mehrere Abhängigkeitsdateien vorhanden sind, werden diese in der folgenden Reihenfolge verwendet:

  • requirements.txt: Listet die Python-Pakete und -Versionen auf, die für Ihre Streamlit-App erforderlich sind, einschließlich Streamlit selbst. Sie können Ihre Python-Version nicht mit requirements.txt konfigurieren.

    Weitere Informationen zum Format von requirements.txt finden Sie unter Requirements File Format in der pip-Dokumentation.

  • pyproject.toml (empfohlen): Verwaltet Ihre Python-Version und Abhängigkeiten. Derzeit wird nur die Python-Version 3.11 unterstützt. Wenn Sie eine pyproject.toml-Datei bereitstellen, erzeugt uv eine uv.lock-Datei, um Ihre Abhängigkeitsversionen zu sperren. Diese Sperrdatei wird immer dann aktualisiert, wenn Sie Ihre Abhängigkeiten aktualisieren. Sie müssen pyproject.toml verwenden, wenn Sie einen anderen Paketindex als PyPI verwenden möchten.

    Weitere Informationen zum Format von pyproject.toml finden Sie unter Writing your pyproject.toml in der Python-Dokumentation.

requirements.txt ist der einfachste Weg, die Abhängigkeiten Ihrer App zu deklarieren, und wird bereitgestellt, um den Einstieg zu erleichtern. Für eine fortgeschrittene Verwaltung von Abhängigkeiten empfiehlt Snowflake jedoch die Verwendung von pyproject.toml. Damit können Sie zum Beispiel Abhängigkeitsversionen sperren, um sicherzustellen, dass Ihre Builds reproduzierbar sind.

Tipp

  • Sie können ein Paket von jeder URL aus installieren, wenn Sie die erforderliche EAI in Ihrer App zugewiesen haben. URLs, die eine Authentifizierung erfordern, müssen eingebettete Anmeldeinformationen unterstützen.

  • Sie können ein Paket aus Ihrem Projektverzeichnis heraus installieren, indem Sie einen relativen Pfad von der Abhängigkeitsdatei zu einer Wheel-Datei verwenden.

  • Wenn Sie Versionsspezifizierer für vorinstallierte Pakete verwenden, müssen Sie eine EAI für einen Paketindex haben, um Fehler zu vermeiden, wenn das Runtime-Basis-Image aktualisiert wird.

In der Regel befinden sich Ihre Einstiegspunkt-Datei und Ihre Abhängigkeitsdatei im Stammverzeichnis Ihres Projektverzeichnisses. Ihre Einstiegspunkt-Datei kann sich jedoch in einem Unterverzeichnis befinden, und Ihre Abhängigkeitsdatei kann sich im selben Verzeichnis oder in einem beliebigen übergeordneten Verzeichnis bis zum Stammverzeichnis Ihres Projekts befinden.

Ihr Projektverzeichnis könnte z. B. eine der folgenden Strukturen haben:

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

Bemerkung

Die Container Runtime verwendet das Verzeichnis, das die Abhängigkeitsdatei enthält, als Arbeitsverzeichnis für uv. Wenn Sie also einen relativen Pfad verwenden, um ein Paket aus den Quelldateien Ihrer App zu installieren, sollte der Pfad relativ zum Speicherort der Abhängigkeitsdatei sein. Weitere Informationen zum Deklarieren von Paketquellen finden Sie unter Dependency Sources in der uv-Dokumentation.

Beispiele für PyPI-Abhängigkeitsdateien

Ihre pyproject.toml-Datei muss name und version enthalten, um ein gültiges Format für uv zu haben, aber die Werte können beliebig sein. Verwenden Sie requires-python, um Ihre Python-Version festzulegen, obwohl Container Runtimes derzeit nur Python 3.11 unterstützen. Verwenden Sie dependencies, um die Python-Pakete für Ihre Container Runtime aufzulisten.

Tipp

Installieren Sie Streamlit als streamlit[snowflake], um seine Snowflake Connector-Abhängigkeiten einzuschließen (snowflake-snowpark-python).

Wenn Sie eine EAI für PyPI haben, deklariert die folgende pyproject.toml-Datei eine Python-Mindestversion von 3.11 und enthält fünf Python-Pakete, die von PyPI installiert werden:

[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

Als Alternative zu pyproject.toml können Sie eine requirements.txt-Datei verwenden, um die Abhängigkeiten Ihrer App zu deklarieren. Die folgende requirements.txt enthält die gleichen Python-Pakete wie das vorherige pyproject.toml-Beispiel:

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

Bemerkung

Um eine Version eines Pakets anzuheften, müssen Sie den ==-Operator verwenden. Um einen Versionsbereich anzugeben, müssen Sie die Operatoren <, <=, >=, and > verwenden. Beispiel: pandas>=2.0.0,<3.0.0 installiert jede Version zwischen 2.0.0 und 2.99.99. Weitere Informationen dazu finden Sie unter Dependency Specifiers.

Beispiele für JFrog-Abhängigkeitsdateien

Zur Erhöhung der Sicherheit verlangt Ihr Systemadministrator möglicherweise, dass Sie einen kuratierten oder privaten Paketindex wie JFrog Artifactory verwenden. Dies ist ein spezielles Feature für Container Runtimes. Durch JFrog können Sie einen öffentlichen oder privaten Paketindex erstellen, der als Proxy für PyPI dient oder benutzerdefinierte Pakete hostet. So können Sie steuern, welche Pakete und Versionen für Ihre Streamlit-Apps verfügbar sind.

Um einen Paketindex anzugeben, müssen Sie pyproject.toml verwenden. Weitere Informationen dazu finden Sie unter Using alternative package indexes in der uv-Dokumentation.

Die folgende pyproject.toml-Datei deklariert eine Python-Mindestversion von 3.11, enthält fünf Python-Pakete und gibt JFrog als Paketindex an, der als Proxy für PyPI dient:

[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

Wenn Ihr JFrog-Repository eine Authentifizierung erfordert, generieren Sie ein persönliches Zugriffstoken oder fordern Sie ein Bereichstoken von Ihrem JFrog-Systemadministrator an. Fügen Sie dann das Token in die URL ein. Verwenden Sie nicht Ihr JFrog-Kennwort in der URL. In diesem Fall würde die Tabelle [[tool.uv.index]] im vorherigen Beispiel durch Folgendes ersetzt:

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

Verwalten von Abhängigkeiten für Warehouse Runtimes

Warehouse Runtimes verwenden conda, um die Abhängigkeiten Ihrer Anwendung zu verwalten. Sie können Ihre Abhängigkeiten mit einer environment.yml-Datei oder der integrierten Paketauswahl in Snowsight deklarieren. Abhängigkeiten werden vom Snowflake Anaconda-Kanal installiert, der sowohl Python-Pakete als auch einige Nicht-Python-Systembibliotheken enthält.

Der Snowflake Anaconda-Kanal enthält mehr Versionen von Streamlit, als in Streamlit in Snowflake Warehouse Runtimes unterstützt werden. Um Kompatibilitätsprobleme zu vermeiden, verwenden Sie nur Versionen von Streamlit, die unter Unterstützte Versionen der Streamlit-Bibliothek in Warehouse Runtimes aufgeführt sind. Darüber hinaus können Sie jedes andere im Snowflake Anaconda-Kanal verfügbare Paket installieren.

environment.yml-Datei

So installieren Sie Abhängigkeiten in Ihrer Warehouse Runtime-Umgebung mithilfe einer environment.yml-Datei: Erstellen oder bearbeiten Sie die Datei im Stammverzeichnis des Quellspeicherorts Ihrer App. Wenn Sie keine environment.yml-Datei angeben, verwendet Snowflake nur die für Ihre ausgewählte Umgebung vorinstallierten Pakete. Weitere Informationen über die Struktur von environment.yml finden Sie in der conda-Dokumentation.

Die folgenden Beschränkungen gelten bei der Verwendung von environment.yml-Dateien in Streamlit in Snowflake Warehouse Runtimes:

Die folgende environment.yml deklariert Python 3.11 und fünf Python-Pakete:

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 empfiehlt, eine Version von Streamlit anzuheften, um zu verhindern, dass die App aktualisiert wird, wenn eine neue Version von Streamlit im Snowflake-Anaconda-Kanal verfügbar wird.

Bemerkung

Um eine Version eines Pakets anzuheften, müssen Sie den =-Operator verwenden. Um einen Versionsbereich anzugeben, müssen Sie *-Platzhalter verwenden. Beispiel: pandas=2.* installiert jede Version von pandas zwischen 2.0.0 und 2.99.99.

Lokale Entwicklung mit conda

Wenn Sie Ihre Warehouse-Laufzeit-App lokal mit conda entwickeln, müssen Sie zusätzliche Details in Ihre environment.yml-Datei aufnehmen, um sicherzustellen, dass die Abhängigkeiten korrekt installiert sind.

  • Identifizieren Sie den Snowflake Anaconda-Kanal durch seine URL: https://repo.anaconda.com/pkgs/snowflake.

  • Blockieren Sie den Standardkanal.

In Ihrer environment.yml verwenden Sie die folgenden zwei Kanäle:

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

Wenn defaults in Ihrer ~/.condarc-Datei erscheint, kommentieren Sie es aus:

channels:
  # - defaults
Copy

Snowsight Paketauswahl

Neben der direkten Bearbeitung der environment.yml-Datei für Ihre Warehouse Runtime-App können Sie auch die integrierte Paketauswahl in Snowsight verwenden, um Pakete zur Umgebung Ihrer App hinzuzufügen oder aus dieser zu entfernen. Die Paketauswahl ist nur für Anwendungen verfügbar, die Warehouse Runtimes verwenden. Außerdem zeigt die Paketauswahl nur Pakete an, die mit der aktuellen Python-Version Ihrer App kompatibel sind. Einige Systembibliotheken, die von der Python-Version unabhängig sind, werden möglicherweise nicht in der Paketauswahl angezeigt und müssen manuell zu environment.yml hinzugefügt werden.

  1. Melden Sie sich bei Snowsight an.

  2. Wählen Sie im Navigationsmenü die Option Projects » Streamlit und dann Ihre Streamlit-App aus.

  3. Wählen Sie in der rechten oberen Ecke die Option Edit aus.

  4. Wählen Sie in der linken oberen Ecke des Editorbereichs die Option Packages aus.

    Es wird ein Dropdown-Bereich mit ausgewählter Anaconda Packages-Registerkarte angezeigt.

  5. Führen Sie eine der folgenden Aktionen aus:

  • Um die Python-Version festzulegen, wählen Sie im Python version-Selektor die gewünschte Version aus.

  • Um ein Paket hinzuzufügen, verwenden Sie die Suchleiste, um Pakete nach Namen zu suchen, und wählen Sie dann das gewünschte Paket aus.

  • Um ein Paket zu entfernen, klicken Sie im Abschnitt Installed Packages auf das Symbol x rechts neben der Paketversion.

  • Um die Version eines installierten Pakets festzulegen, verwenden Sie im Abschnitt Installed Packages die Versionsauswahl neben dem Paketnamen.

Snowflake aktualisiert Ihre environment.yml-Datei automatisch und startet die App neu. Wenn Sie die Datei environment.yml im Editor geöffnet haben, aktualisieren Sie die Seite, um die Änderungen zu sehen.