Streamlitアプリの依存関係を管理する

デフォルトでは Streamlit in Snowflake 環境にはPython、Streamlit、Snowflake Snowparkがインストールされます。アプリの依存関係を管理する方法は、選択したランタイム環境によって異なります。

  • uv を使用するコンテナランタイム管理パッケージ。pyproject.toml (推奨)または requirements.txt ファイルで依存関係を指定できます。デフォルトでは、アプリは PyPI のようなパッケージインデックスにアクセスできません。したがって、アプリの依存関係のバージョンを編集または指定する場合は、外部アクセス統合( EAI )を作成する必要があります。さらに、プロジェクトディレクトリに含まれるホイールファイルからパッケージをインストールできます。

  • conda を使用するウェアハウスランタイム管理パッケージ。environment.yml ファイルまたは Snowsight の組み込みパッケージピッカーを使用して依存関係を指定できます。Snowflake Anacondaチャネル からのパッケージのみをインストールできます。

デプロイされたアプリでファイルを追加または編集するには、 デプロイされたStreamlitアプリの編集 をご参照ください。

サポートされている依存関係ソース

ウェアハウスランタイム

コンテナランタイム

PyPI または他の外部の 「シンプル」 パッケージインデックス

無し

有り( EAI を使用)

Snowflake Anacondaチャネル

有り(Streamlitバージョンに制限あり)

無し

内部ステージ

無し

有り(ただし、アプリのソースファイル内の相対パス経由のみ)

Snowflakeアーティファクトリポジトリ( snowflake.snowpark.pypi_shared_repository

無し

無し

サポートされているPythonのバージョン

新規作成の Streamlit in Snowflake アプリは、デフォルトでPython 3.11で実行されます。

  • コンテナランタイムの場合、Python 3.11が唯一のサポートバージョンです。

  • ウェアハウスランタイムの場合、Python 3.9、3.10、3.11から選択できます。

サポートされているStreamlitのバージョン

新しく作成された Streamlit in Snowflake アプリは、ランタイム環境で利用可能なStreamlitの最新サポートバージョンを使用します。Streamlitの新しいバージョンがリリースされた場合、新バージョンがデフォルトになるまでに時間がかかる可能性があります。

  • コンテナランタイムの場合、Streamlitの必要な最小バージョンは1.50です。streamlit-nightly バージョンを含め、Streamlitのそれ以降のバージョンを使用することができます。

    重要

    streamlit-nightly バージョンは実験的です。詳細については、Streamlitドキュメント内の Nightlyリリース をご参照ください。

    パッケージインデックスからインストールすると、最新のStreamlitバージョンをすぐに使用できます。

  • ウェアハウスランタイムの場合、1.22.0から始まるバージョンのサブセットに制限されています。 streamlit-nightly バージョンはサポートされていません。

    Streamlitの最新バージョンをウェアハウスランタイムですぐに使用することはできません。

予期しないパッケージのアップグレードを防ぐには、このページの説明に従ってアプリの依存関係を構成します。

ウェアハウスランタイムでサポートされているStreamlitライブラリのバージョン

Streamlit in Snowflake は、次のバージョンの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

Python以外の依存関係

一部のPythonパッケージでは、ランタイム環境にPython以外のシステムライブラリをインストールする必要があります。たとえば、 Pillow パッケージには、さまざまな画像形式を処理するためのライブラリが必要です。

  • コンテナランタイムではPython以外の依存関係には、事前インストール済みのシステムライブラリのみを使用できます。追加のPython以外の依存関係のインストールはまだサポートされていません。

  • ウェアハウスランタイムにおけるPython以外の依存関係の場合、一部のシステムライブラリはSnowflake Anacondaチャネルで利用できます。

依存関係を宣言するためのベストプラクティス

アプリの依存関係を宣言するときは、次のベストプラクティスを考慮してください。

  • 重要なパッケージバージョンを固定します。

    • コンテナランタイムの場合は、 pyproject.toml または requirements.txt ファイルで == 演算子を使用します。

    • ウェアハウスのランタイムの場合は、 environment.yml ファイルで = 演算子を使用します。

  • 柔軟性を保つために、バージョンの範囲を使用します。

    • コンテナランタイムの場合は、 pyproject.toml または requirements.txt ファイルで <, <=, >=, and > 演算子を使用します。

    • ウェアハウスランタイムの場合は、 environment.yml ファイルで * ワイルドカードサフィックスを使用します。

  • ビルド時間を短縮するために、依存関係リストを最小限に抑えます。

  • デプロイする前に、開発中の依存関係の変更をテストします。

  • 依存関係がランタイムのPythonバージョンと互換性があることを確認します。

ランタイムを移行したり、パッケージマネージャーを変更したりする場合は、依存関係の名前を確認します。たとえば、一部のパッケージはCondaと PyPI で名前が異なります。

パッケージ

Condaでの名前

PyPI での名前

Pillow

pillow

Pillow

OpenCV

opencv

opencv-python

PyYAML

pyyaml

PyYAML

コンテナランタイムの依存関係の管理

コンテナランタイムのアプリは、 EAI のような外部パッケージインデックスからパッケージをインストールするのに、外部アクセス統合( PyPI )を必要とします。EAI がない場合、ランタイムに付属のパッケージまたはアプリのソースファイルに含まれるパッケージのみを使用できます。

Streamlitのバージョンのみを指定する場合でも、アプリに EAI を含める必要があります。EAI がない場合、事前インストール済みのパッケージでバージョン指定子を使用しようとすると、ランタイムのベースイメージが更新されたときにエラーが発生する可能性があります。これは、バージョン指定子が事前インストール済みのパッケージと互換性を持たなくなる可能性があるためです。

コンテナランタイムの外部アクセス統合

外部アクセス統合( EAIs )の一般的な概要については、 外部ネットワークアクセスの概要 をご参照ください。

PyPI に EAI

PyPI は、コンテナランタイムにPythonパッケージをインストールするためにuvが使用するデフォルトのパッケージインデックスです。PyPI 用の EAI を作成するには、必要なすべての PyPI ドメインへのアクセスを許可するネットワークルールが必要です。 EAIs は通常、アカウント管理者またはセキュリティチームによって作成および管理されます。

たとえば、次の SQL コマンドは PyPI 用の EAI (pypi_access_integration )を作成し、 USAGE をアプリ開発ロール( 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

EAI の作成後、Streamlitオブジェクトに追加する必要があります。これは、 Snowsight または SQL で実行できます。

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで、 Projects » Streamlit を選択してから、アプリを選択します。

  3. 右上隅で、 他のオプションを示す3つの垂直の点 (その他のオプション) » App settings を選択します。

  4. App settings ダイアログで、 External networks タブを選択します。

  5. 利用可能な EAIs のリストから、 PyPI 用の EAI を選択します。

  6. 変更を保存してダイアログを閉じるには、 Save を選択します。

依存関係ファイル

コンテナランタイムは、高速で信頼性の高い依存関係解決のためにuvを使用します。uvはpipと同様にPythonパッケージをインストールしますが、よりパフォーマンスが高く、カスタマイズが可能です。uvの機能の詳細については、uvドキュメントの 機能 概要をご参照ください。

コンテナランタイムは、アプリのエントリポイントファイルと同じディレクトリにある依存関係ファイルを検索します。依存関係ファイルが見つからない場合、検索はアプリのソースロケーションのルートに到達するまで、ディレクトリツリーをたどります。最初に見つかった依存関係ファイルは、アプリの依存関係をインストールするために使用されます。

同じディレクトリに複数の依存関係ファイルが存在する場合、それらは以下の優先順位で使用されます。

  • requirements.txt:Streamlit自体など、Streamlitアプリに必要なPythonパッケージとバージョンのリストを表示します。requirements.txt を使用してPythonバージョンを構成することはできません。

    requirements.txt の形式の詳細については、pipドキュメントの 要件ファイル形式 をご参照ください。

  • pyproject.toml (推奨):Pythonのバージョンと依存関係を管理します。現在、Pythonバージョン3.11のみがサポートされています。pyproject.toml ファイルを提供するとき、uvは uv.lock ファイルを生成して依存関係のバージョンをロックします。このロックファイルは、依存関係を更新するたびに更新されます。PyPI と異なるパッケージインデックスを使用する場合は pyproject.toml を使用する必要があります。

    pyproject.toml の形式の詳細については、Pythonドキュメント内の pyproject.tomlの記述 をご参照ください。

requirements.txt は、アプリの依存関係を宣言する最も簡単な方法であり、開始の利便性のために提供されています。ただし、より高度な依存関係管理のために、Snowflakeは代わりに pyproject.toml を使用することを推奨しています。たとえば、これにより依存関係のバージョンをロックし、ビルドの再現性を確保することができます。

Tip

  • 必要な EAI をアプリに割り当てていれば、どの URL からでもパッケージをインストールできます。認証が必要な URLs は、埋め込み認証情報をサポートしている必要があります。

  • 依存関係ファイルからホイールファイルへの相対パスを使用して、プロジェクトディレクトリ内からパッケージをインストールできます。

  • 事前インストール済みパッケージでバージョン指定子を使用する場合は、ランタイムのベースイメージが更新されたときにエラーが発生しないように、パッケージインデックス用の EAI が必要です。

通常、エントリポイントファイルと依存関係ファイルはプロジェクトディレクトリのルートにあります。ただし、エントリポイントファイルはサブディレクトリに配置でき、依存関係ファイルは同じディレクトリまたはプロジェクトのルートまでの任意の親に配置できます。

たとえば、プロジェクトディレクトリは次のような構造のいずれかを持ちます。

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

注釈

コンテナランタイムは、uvの作業ディレクトリとして依存関係ファイルを含むディレクトリを使用します。したがって、相対パスを使用してアプリのソースファイルの中からパッケージをインストールする場合、パスは依存関係ファイルの場所に対して相対的である必要があります。パッケージソースの宣言の詳細については、uvドキュメント内の 依存関係のソース をご参照ください。

PyPI 依存関係ファイルの例

pyproject.toml ファイルには name および version が含まれ、uvに対して有効な形式である必要がありますが、それらの値は任意です。コンテナランタイムは今のところPython 3.11のみをサポートしていますが、 requires-python を使用してPythonのバージョンを設定します。dependencies を使用して、コンテナランタイム用のPythonパッケージのリストを表示します。

Tip

streamlit[snowflake] としてStreamlitをインストールして Snowflakeコネクタの依存関係を含めます( snowflake-snowpark-python )。

PyPI 用の EAI がある場合、次の pyproject.toml ファイルはPythonの最小バージョン3.11を宣言し、 PyPI からインストールされる5つのPythonパッケージを含みます。

[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

pyproject.toml の代わりとして、 requirements.txt ファイルを使用してアプリの依存関係を宣言できます。次の requirements.txt には、先ほどの pyproject.toml の例と同じPythonパッケージが含まれています。

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

注釈

パッケージのバージョンを固定するには、 == 演算子を使用する必要があります。バージョンの範囲を指定するには、 <, <=, >=, and > 演算子を使用する必要があります。たとえば、 pandas>=2.0.0,<3.0.0 は2.0.0と2.99.99の間の任意のバージョンをインストールします。詳細については、 依存関係の指定子 をご参照ください。

JFrog 依存関係ファイルの例

セキュリティを強化するために、システム管理者は、 JFrog Artifactoryのような厳選された、またはプライベートのパッケージインデックスを使用するよう求める場合があります。これはコンテナランタイム独自の機能です。JFrog を使用すると、 PyPI をプロキシする、またはカスタムパッケージをホストするパブリックまたはプライベートパッケージインデックスを作成できます。これにより、Streamlitアプリで使用可能なパッケージとバージョンを制御できます。

パッケージインデックスを指定するには、 pyproject.toml を使用する必要があります。詳細については、uvドキュメント内の 代替パッケージインデックスの使用 をご参照ください。。

次の pyproject.toml ファイルはPythonの最小バージョン3.11を宣言し、5つのPythonパッケージを含み、 PyPI をプロキシするパッケージインデックスとして JFrog を指定します。

[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

JFrog リポジトリが認証を必要とする場合は、個人アクセストークンを生成するか、 JFrog システム管理者からスコープトークンを取得してください。次に、トークンを URL に含めます。URL に JFrog パスワードを使用しないでください。この場合、先ほどの例の [[tool.uv.index]] テーブルは次のように置き換えられます。

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

ウェアハウスランタイムの依存関係の管理

ウェアハウスランタイムはcondaを使用してアプリの依存関係を管理します。environment.yml ファイルまたは Snowsight の組み込みパッケージピッカーを使用して依存関係を宣言できます。依存関係は、PythonパッケージとPython以外のシステムライブラリの両方が含まれる Snowflake Anacondaチャネル からインストールされます。

Snowflake Anacondaチャネルには、 Streamlit in Snowflake ウェアハウスランタイムでサポートされているものより多いバージョンのStreamlitが含まれています。互換性の問題を回避するには、 ウェアハウスランタイムでサポートされているStreamlitライブラリのバージョン にリストされているStreamlitのバージョンのみを使用してください。それ以外の場合は、Snowflake Anacondaチャネルで利用可能な他のパッケージをインストールすることができます。

environment.yml ファイル

environment.yml を使用してウェアハウスランタイム環境に依存関係をインストールするには、アプリのソースロケーションのルートでファイルを作成または編集します。environment.yml ファイルを提供しない場合、Snowflakeは選択した環境に事前インストール済みのパッケージのみを使用します。environment.yml の構造の詳細については、 condaドキュメント をご参照ください。

Streamlit in Snowflake ウェアハウスランタイムで environment.yml ファイルを使用する場合、次の制限が適用されます。

次の environment.yml はPython 3.11と5つの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 Anaconda Channel で Streamlit の新バージョンが利用可能になったときにアプリがアップグレードされないように、Streamlit のバージョンを固定することをお勧めします。

注釈

パッケージのバージョンを固定するには、 = 演算子を使用する必要があります。バージョンの範囲を指定するには、 * ワイルドカードを使用する必要があります。たとえば、 pandas=2.* は2.0.0と2.99.99の間の任意のバージョンをインストールします。

condaによるローカル開発

condaを使用してウェアハウスランタイムアプリをローカルで開発する場合は、 environment.yml ファイルに追加の詳細情報を含め、依存関係が正しくインストールされるようにする必要があります。

  • Snowflake Anacondaチャネルを URL: https://repo.anaconda.com/pkgs/snowflake で特定します。

  • デフォルトのチャネルをブロックします。

environment.yml では、次の2つのチャネルを使用します。

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

〜/.condarc ファイルに defaults が表示される場合、コメントアウトします。

channels:
  # - defaults
Copy

Snowsight パッケージピッカー

ウェアハウスランタイムアプリの environment.yml ファイルを直接編集することに加えて、 Snowsight で組み込みのパッケージピッカーを使用して、アプリの環境からパッケージを追加または削除できます。パッケージピッカーはウェアハウスランタイムを使用するアプリでのみ使用できます。さらに、パッケージピッカーには、アプリの現在のPythonバージョンと互換性のあるパッケージのみが表示されます。Pythonバージョンに依存しない一部のシステムライブラリは、パッケージピッカーに表示されない場合があり、 environment.yml に手動で追加する必要があります。

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで、 Projects » Streamlit を選択し、Streamlitアプリを選択します。

  3. 右上隅の Edit を選択します。

  4. エディターペインの左上隅にある Packages を選択します。

    ドロップダウンペインが、 Anaconda Packages タブが選択された状態で表示されます。

  5. 次のアクションのいずれかを実行します。

  • Pythonバージョンを設定するには、 Python version セレクターで目的のバージョンを選択します。

  • パッケージを追加するには、検索バーを使用して名前でパッケージを検索し、目的のパッケージを選択します。

  • パッケージを削除するには、 Installed Packages セクションでパッケージバージョンの右側にある x アイコンを選択します。

  • インストールされるパッケージのバージョンを設定するには、 Installed Packages セクションで、パッケージ名の横にあるバージョンセレクターを使用します。

Snowflakeは environment.yml ファイルを自動的に更新し、アプリを再起動します。エディターで environment.yml ファイルを開いている場合は、ページを更新して変更を確認します。