Organisieren Ihrer Streamlit-App-Dateien¶
Wenn Sie eine App auf Streamlit in Snowflake bereitstellen, kann die Einstiegspunkt-Datei der App einen beliebigen Namen haben, der den Standardkonventionen für die Dateibenennung entspricht, und kann sich überall im Quellverzeichnis der App befinden. Das Quellverzeichnis der App kann zusätzliche Dateien enthalten, wie z. B. Seitenskripte, Python-Module, Mediendateien und Konfigurationsdateien.
Der Stamm des Quellverzeichnisses Ihrer App ist das Arbeitsverzeichnis von Streamlit. Wenn Sie Ihre App lokal entwickeln und ausführen, bedeutet dies, dass Sie den streamlit run-Befehl im Stamm Ihres Quellverzeichnisses ausführen müssen, um sicherzustellen, dass alle Pfade korrekt sind.
Wenn Sie eine Streamlit-App von der Snowsight aus initialisieren oder CREATE STREAMLIT ohne Angabe eines Quellspeicherorts verwenden, enthält der eingebettete Stagingbereich des Streamlit-Objekts eine Einstiegspunkt-Datei in seinem Stammverzeichnis. Sie können den Datei-Explorer verwenden, um weitere Dateien hinzuzufügen. Wenn Sie Ihre Einstiegspunkt-Datei umbenennen oder verschieben müssen, müssen Sie SQL-Befehle zum Aktualisieren des MAIN_FILE-Werts Ihres Streamlit-Objekts verwenden.
Bemerkung
Wenn Sie den CREATE STREAMLIT-Befehl mit dem ROOT_LOCATION-Parameter verwenden, kann Ihre App nur eine Warehouse-Laufzeit verwenden und unterliegt zusätzlichen Einschränkungen. Diese Seite behandelt Apps, die mit dem FROM-Parameter erstellt wurden. Weitere Informationen dazu finden Sie unter Erläuterungen zu den verschiedenen Typen von Streamlit-Objekten.
Container-Laufzeit-Dateistruktur¶
Wenn Sie eine Container-Laufzeit verwenden, kann Ihre Einstiegspunkt-Datei einen beliebigen Namen haben, der den Standardkonventionen für die Dateibenennung entspricht, und kann sich an einer beliebigen Stelle in Ihrem Quellverzeichnis befinden. Mit der Einführung von st.navigation in Streamlit v1.36 ist die häufigste Verwendung jedoch streamlit_app.py als Einstiegspunkt-Datei, da die Seitennamen nicht aus den Dateinamen abgeleitet werden müssen.
Snowflake führt den streamlit run-Befehl aus dem Stamm des Quellverzeichnisses aus, sodass Sie die Pfade entsprechend behandeln müssen.
Ihre Einstiegspunkt-Datei kann einen beliebigen Namen haben und sich an einer beliebigen Stelle in Ihrem Quellverzeichnis befinden.
Ihre Abhängigkeitsdateien können sich in einem beliebigen Verzeichnis zwischen dem Stamm Ihres Quellverzeichnisses und dem Verzeichnis befinden, das Ihre Einstiegspunkt-Datei enthält. Weitere Informationen dazu finden Sie unter Verwalten von Abhängigkeiten für Ihre Streamlit-App.
Sie können eines oder mehrere
.streamlit/-Verzeichnisse zwischen dem Stamm Ihres Quellverzeichnisses und dem Verzeichnis haben, das Ihre Einstiegspunkt-Datei enthält.Der Stamm Ihres Quellverzeichnisses ist das Arbeitsverzeichnis von Streamlit.
Die folgende Verzeichnisstruktur ist für eine Container-Laufzeit-Streamlit-App gültig:
source_directory/
├── .streamlit/ # Optional configuration
│ ├── config.toml
│ └── secrets.toml
├── page_1.py # Page 1
├── page_2.py # Page 2
├── pyproject.toml # Python dependencies
├── streamlit_app.py # Entrypoint file
└── uv.lock # Auto-generated lockfile
Die folgende Verzeichnisstruktur zeigt zwei -Apps in einem Quellverzeichnis, jede mit einer eigenen Einstiegspunkt-Datei und Abhängigkeiten. In diesem Beispiel gibt es zwei verschiedene Streamlit-Objekte. Bei beiden Streamlit-Objekten wird für FROM der Speicherort festgelegt, der von source_directory angegeben ist. Jedes Objekt legt MAIN_FILE jedoch auf eine andere streamlit_app.py-Datei fest. Die erste App verwendet eine pyproject.toml-Datei für Abhängigkeiten, während die zweite App eine requirements.txt-Datei verwendet.
source_directory/
├── .streamlit/ # Shared configuration
│ ├── config.toml
│ └── secrets.toml
├── app_one/ # First app source directory
│ ├── .streamlit/ # Overriding first-app configuration
│ │ ├── config.toml
│ │ └── secrets.toml
│ ├── page_1.py
│ ├── page_2.py
│ ├── pyproject.toml # Python dependencies for first app
│ ├── streamlit_app.py # Entrypoint file for first app
│ └── uv.lock
├── app_two/ # Second app source directory
│ ├── requirements.txt # Python dependencies for second app
│ ├── page_1.py
│ ├── page_2.py
│ ├── streamlit_app.py # Entrypoint file for second app
│ └── uv.lock
└── utils/ # Shared modules
└── helper.py
Wichtig
Einige Streamlit-Features erfordern Pfade relativ zum Arbeitsverzeichnis, während andere Pfade relativ zur Einstiegspunkt-Datei erfordern.
Normalerweise sollten Pfade zu Bildern und anderen Medien innerhalb Ihrer App relativ zum Arbeitsverzeichnis (dem Stamm Ihres Quellverzeichnisses) sein. Pfade zu anderen Seiten in einer mehrseitigen App sind jedoch relativ zum Speicherort der Einstiegspunkt-Datei.
Um Verwirrung zu vermeiden, sollten Sie Ihre App-Dateien so organisieren, dass sich die Einstiegspunkt-Datei im Stamm Ihres Quellverzeichnisses befindet. Sie können mehrere Apps in einem Git-Repository speichern und ein Unterverzeichnis an den FROM-Parameter übergeben, wenn Sie das Streamlit-Objekt erstellen. Dieses Unterverzeichnis ist dann das Quellverzeichnis Ihrer App. Im vorherigen Beispiel bedeutet dies, dass Sie source_directory/app_one und source_directory/app_two im FROM-Parameter verwenden. Allerdings würden die Apps in diesem Fall den Zugriff auf die freigegebenen Module in source_directory/utils verlieren.
Dateistruktur der Warehouse-Laufzeit¶
Wenn Sie eine Warehouse-Laufzeit verwenden, kann Ihre Einstiegspunkt-Datei einen beliebigen Namen haben, muss sich aber im Stamm Ihres Quellverzeichnisses befinden. Ihre Python-Version und die Abhängigkeiten werden in einer environment.yml-Datei im Stamm Ihres Quellverzeichnisses angegeben. Wenn Sie keine environment.yml-Datei einschließen, läuft Ihre App auf der neuesten Version von Python und Streamlit, die derzeit von Streamlit in Snowflake unterstützt werden. Wenn Sie die Paketauswahl in Snowsight verwenden, um Pakete hinzuzufügen, wird die environment.yml-Datei automatisch für Sie aktualisiert oder erstellt.
Die folgende Verzeichnisstruktur ist für eine Warehouse-Laufzeit-Streamlit-App gültig:
source_directory/
├── .streamlit/ # Optional configuration
│ └── config.toml
├── environment.yml # Conda dependencies
├── page_1.py
├── page_2.py
└── streamlit_app.py # Entrypoint file
Importieren von Modulen und Dateien aus anderen Stagingbereichen¶
Die Befehle CREATE STREAMLIT und ALTER STREAMLIT unterstützen den IMPORTS-Parameter, mit dem Sie zusätzliche Dateien aus anderen Stagingbereichen in das Quellverzeichnis Ihrer App importieren können. Wenn Sie gemeinsame Module oder Dateien haben, die Sie über mehrere Apps hinweg freigeben möchten, können Sie diese in einem Stagingbereich speichern und sie mit dem IMPORTS-Parameter in jede App importieren. Dies wird jedoch nur für Anwendungen unterstützt, die eine Warehouse-Laufzeit verwenden.
Mehrseitige Apps¶
Streamlit unterstützt zwei Methoden zum Erstellen mehrseitiger Apps:
Verwenden von
st.navigation: Sie können denst.navigation-Befehl verwenden, um eine kundenspezifische Navigationsstruktur innerhalb Ihrer App zu erstellen. Auf diese Weise können Sie Seiten programmgesteuert definieren und den Navigationsablauf steuern. Die Einstiegspunkt-Datei fungiert wie ein Seiten-Router, und die Seiten Ihrer App können an beliebiger Stelle in Ihrem Quellverzeichnis als Funktionen oder Python-Skripte definiert werden. Dies ist die empfohlene Methode für das Erstellen mehrseitiger Apps, da sie die meiste Flexibilität bietet.Verwenden eines
pages/-Verzeichnisses: Sie können ein Verzeichnis mit dem Namenpages/neben der Einstiegspunkt-Datei Ihrer App erstellen. Die Einstiegspunkt-Datei wird als Startseite Ihrer App behandelt. Jede Python-Datei impages/-Verzeichnis wird als zusätzliche Seite in der App behandelt. Die Seitennamen werden von den Dateinamen abgeleitet.
Sie können nicht beide Methoden gleichzeitig zur Erstellung mehrseitiger Apps verwenden. Weitere Informationen zu mehrseitigen Apps finden Sie unter Overview of multipage apps in der Streamlit-Dokumentation.
Bemerkung
Wenn Sie mehrseitige Anwendungen in Streamlit in Snowflake hosten, wird den Pfadnamen URL das Präfix /! vorangestellt. Wenn zum Beispiel der relative Pfad zu einer Seite in einer mehrseitigen Anwendung /page2 lautet, wird der relative Pfad in Streamlit in Snowflake zu /!/page2, wie in der folgenden URL gezeigt: https://app.snowflake.com/org/account_name/#/streamlit-apps/DB.SCHEMA.APP_NAME/!/page_2
Aktualisieren der Einstiegspunkt-Datei¶
Wenn Sie Ihre Einstiegspunkt-Datei umbenennen oder verschieben, müssen Sie SQL-Befehle verwenden, um Ihr Streamlit-Objekt zu aktualisieren und die neue Einstiegspunkt-Datei zu verwenden. Sie müssen eine Container-Laufzeit verwenden, wenn Sie Ihre Einstiegspunkt-Datei in ein Unterverzeichnis verschieben.
Verwenden Sie den ALTER STREAMLIT-Befehl zum Ändern des MAIN_FILE-Parameters Ihres Streamlit-Objekts, wie im folgenden Beispiel gezeigt:
ALTER STREAMLIT my_streamlit_app SET MAIN_FILE = 'subdir/new_entrypoint.py';
In diesem Beispiel wird die Einstiegspunkt-Datei des
my_streamlit_app-Streamlit-Objekt insubdir/new_entrypoint.pygeändert.