Streamlitアプリファイルを整理する

Streamlit in Snowflake にアプリをデプロイする場合、アプリのエントリポイントファイルに、標準のファイル命名規則に従う任意の名前を付けることができ、アプリのソースディレクトリのどこにでも配置できます。アプリのソースディレクトリには、ページスクリプト、Pythonモジュール、メディアファイル、構成ファイルなどの追加ファイルを含めることができます。

アプリのソースディレクトリのルートはStreamlitの作業ディレクトリです。ローカルでアプリを開発して実行する場合は、すべてのパスが正しいことを確認できるようソースディレクトリのルートから streamlit run コマンドを実行する必要があります。

Snowsight からStreamlitアプリを初期化する場合、またはソースの場所を指定せずに CREATE STREAMLIT を使用する場合、Streamlitオブジェクトの埋め込みステージのルートにエントリポイントファイルが含まれます。ファイルエクスプローラーを使用してファイルを追加できます。エントリポイントファイルの名前を変更する、または移動する必要がある場合は、 SQL コマンドを使用してStreamlitオブジェクトの MAIN_FILE 値を更新する必要があります。

注釈

ROOT_LOCATION パラメーターを使用した CREATESTREAMLIT コマンドを使用すると、アプリはウェアハウスランタイムのみを使用でき、追加制限が適用されます。このページでは、 FROM パラメーターで作成されたアプリを説明します。詳細については、 さまざまなタイプのStreamlitオブジェクトについて理解する をご参照ください。

コンテナランタイムのファイル構造

コンテナランタイムを使用する場合、エントリポイントファイルに、標準のファイル命名規則に従う任意の名前を付けることができ、ソースディレクトリのどこにでも配置できます。ただし、Streamlit v1.36 では st.navigation が導入され、エントリポイントファイルとして streamlit_app.py を使用するのが最も一般的です。これは、ページ名をファイル名から推測する必要がないためです。

Snowflakeはソースディレクトリのルートから streamlit run コマンドを実行するため、それに応じてパスを処理する必要があります。

  • エントリポイントファイルには任意の名前を付けることができ、ソースディレクトリの任意の場所に配置することができます。

  • 依存関係ファイルは、ソースディレクトリのルートと、エントリポイントファイルを含むディレクトリの間の任意のディレクトリに配置できます。詳細については、 Streamlitアプリの依存関係を管理する をご参照ください。

  • ソースディレクトリのルートと、エントリポイントファイルを含むディレクトリの間に1つ以上の .streamlit/ ディレクトリを持つことができます。

  • ソースディレクトリのルートはStreamlitの作業ディレクトリです。

次のディレクトリ構造は、コンテナランタイムのStreamlitアプリで有効です。

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
Copy

次のディレクトリ構造は、1つのソースディレクトリ内の2つのアプリを示しており、それぞれに独自のエントリポイントファイルと依存関係があります。この例では、2つの異なるStreamlitオブジェクトが存在します。両方のStreamlitオブジェクトは FROM を source_directory によって表される場所に設定していますが、各オブジェクトは MAIN_FILE を異なる streamlit_app.py ファイルに設定しています。1つ目のアプリは依存関係に pyproject.toml ファイルを使用していますが、2つ目のアプリは requirements.txt ファイルを使用しています。

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
Copy

重要

Streamlit機能には、作業ディレクトリへの相対パスを必要とするものと、エントリポイントファイルへの相対パスを必要とするものがあります。

通常、アプリ内の画像やその他のメディアへのパスは、作業ディレクトリ(ソースディレクトリのルート)に相対的である必要があります。ただし、マルチページアプリ内の他のページへのパスは、エントリポイントファイルの場所から相対的です。

混乱を避けるため、エントリポイントファイルがソースディレクトリのルートにあるようにアプリファイルを整理することを検討してください。Streamlitオブジェクトを作成するときに、複数のアプリを1つのGitリポジトリに保存し、 FROM パラメーターにサブディレクトリを渡すことができます。そのサブディレクトリはアプリのソースディレクトリになります。前述の例では、 FROM パラメーターで source_directory/app_one および source_directory/app_two を使用することになります。ただし、その場合、アプリは source_directory/utils の共有モジュールへのアクセスを失うことになります。

ウェアハウスランタイムのファイル構造

ウェアハウスランタイムを使用する場合、エントリポイントファイルには任意の名前を付けることができますが、ソースディレクトリのルートに配置する必要があります。Pythonバージョンと依存関係は、ソースディレクトリのルートにある environment.yml ファイルで指定されます。environment.yml ファイルを含めない場合、アプリは Streamlit in Snowflake で現在サポートされているPythonの最新バージョンとStreamlitの最新バージョンで実行されます。Snowsight で パッケージピッカー を使用してパッケージを追加する場合、 environment.yml ファイルは自動的に更新または作成されます。

以下のディレクトリ構造は、ウェアハウスランタイムのStreamlitアプリで有効です。

source_directory/
├── .streamlit/           # Optional configuration
│   └── config.toml
├── environment.yml       # Conda dependencies
├── page_1.py
├── page_2.py
└── streamlit_app.py      # Entrypoint file
Copy

他のステージからのモジュールとファイルのインポート

CREATE STREAMLIT および ALTER STREAMLIT コマンドは、 IMPORTS パラメーターをサポートしています。このパラメーターにより、他のステージからアプリのソースディレクトリに追加ファイルをインポートできます。複数のアプリで共有したい共通モジュールやファイルのセットがある場合は、それらをステージに保存し、 IMPORTS パラメーターを使用して各アプリにインポートすることができます。ただし、これはウェアハウスランタイムを使用するアプリでのみサポートされます。

マルチページアプリ

Streamlitは、マルチページアプリを作成するのに2つの方法をサポートしています。

  • st.navigation を使用して、st.navigation コマンドを使用して、アプリ内にカスタムナビゲーション構造を作成できます。これにより、プログラムでページを定義し、ナビゲーションフローを制御できます。エントリポイントファイルはページルーターのように動作し、アプリのページはソースディレクトリのどこでも関数またはPythonスクリプトとして定義できます。これは最も柔軟性が高いため、マルチページアプリの作成にお勧めの方法です。

  • pages/ ディレクトリの使用:アプリのエントリポイントファイルの隣に pages/ という名前のディレクトリを作成できます。エントリポイントファイルは、アプリのホームページとして扱われます。pages/ ディレクトリ内の各Pythonファイルはアプリの追加ページとして扱われます。ページ名はファイル名から派生します。

マルチページアプリの作成に、この2つの方法を組み合わせることはできません。マルチページアプリの詳細については、Streamlitドキュメント内の マルチページアプリの概要 をご参照ください。

注釈

マルチページアプリを Streamlit in Snowflake でホストする場合、 URL のパス名のプレフィックスには /! が付きます。たとえば、ページへの相対パスがマルチページアプリ内で /page2 である場合、 Streamlit in Snowflake 内の相対パスは次の URL のように /!/page2 になります: https://app.snowflake.com/org/account_name/#/streamlit-apps/DB.SCHEMA.APP_NAME/!/page_2

エントリポイントファイルを更新する

エントリポイントファイルの名前を変更する、または移動する場合は、 SQL コマンドを使用して、新しいエントリポイントファイルを使用するようにStreamlitオブジェクトを更新する必要があります。エントリポイントファイルをサブディレクトリに移動する場合は、コンテナランタイムを使用する必要があります。

  1. 次の例で示されているように、 ALTER STREAMLIT コマンドを使用して、Streamlitオブジェクトの MAIN_FILE パラメーターを変更します。

    ALTER STREAMLIT my_streamlit_app
    SET MAIN_FILE = 'subdir/new_entrypoint.py';
    
    Copy

    この例では、 my_streamlit_app``Streamlitオブジェクトのエントリポイントファイルを ``subdir/new_entrypoint.py に変更します。