Streamlit 앱의 종속성 관리하기¶
기본적으로, Streamlit in Snowflake 환경은 Python, Streamlit 및 Snowflake Snowpark가 설치된 상태로 제공됩니다. 앱의 종속성을 관리하는 방법은 선택한 런타임 환경에 따라 다릅니다.
Container Runtime은
uv<https://docs.astral.sh/uv/>`_를 사용하여 패키지를 관리합니다. :file:`pyproject.toml`(권장) 또는 :file:`requirements.txt파일에서 종속성을 지정할 수 있습니다. 기본적으로 앱은 PyPI과 같은 패키지 인덱스에 액세스할 수 없습니다. 따라서 앱 종속성의 버전을 편집하거나 지정하려면 외부 액세스 통합(EAI)을 생성해야 합니다. 또한 프로젝트 디렉터리에 포함된 휠 파일에서 패키지를 설치할 수 있습니다.Warehouse Runtime은
conda<https://docs.conda.io/en/latest/>`_를 사용하여 패키지를 관리합니다. :file:`environment.yml파일 또는 Snowsight 의 기본 제공 패키지 선택기를 사용하여 종속성을 지정할 수 있습니다. `Snowflake Anaconda 채널<https://repo.anaconda.com/pkgs/snowflake/>`_에 나열된 패키지만 설치할 수 있습니다.
배포된 앱에서 파일을 추가하거나 편집하는 방법을 알아보려면 배포된 Streamlit 앱 편집하기 섹션을 참조하세요.
지원되는 종속성 소스 |
Warehouse Runtime |
Container Runtime |
|---|---|---|
PyPI 또는 기타 외부 `"단순"<https://peps.python.org/pep-0503/>`_ 패키지 인덱스 |
아니요 |
예(EAI 포함) |
Snowflake Anaconda 채널 |
예(Streamlit 버전에 대한 제한 사항 있음) |
아니요 |
내부 스테이지 |
아니요 |
예(그러나 앱의 소스 파일 내 상대 경로를 통해서만 가능) |
Snowflake 아티팩트 리포지토리( |
아니요 |
아니요 |
지원되는 Python 버전¶
새로 생성된 Streamlit in Snowflake 앱은 기본적으로 Python 3.11에서 실행됩니다.
Container Runtime의 경우 Python 3.11이 현재 유일하게 지원되는 버전입니다.
Warehouse Runtime의 경우 Python 3.9, 3.10, 3.11 중에서 선택할 수 있습니다.
지원되는 Streamlit 버전¶
새로 생성된 Streamlit in Snowflake 앱은 런타임 환경에서 사용할 수 있는 지원되는 최신 버전의 Streamlit을 사용합니다. Streamlit의 새 버전이 출시되면 새 버전이 기본값이 되기까지 지연이 발생할 수 있습니다.
Container Runtime의 경우 Streamlit의 최소 필수 버전은 1.50입니다.
streamlit-nightly버전을 포함한 모든 최신 버전의 Streamlit을 사용할 수 있습니다.중요
streamlit-nightly버전은 실험적입니다. 자세한 내용은 Streamlit 설명서의 `Nightly 릴리스<https://docs.streamlit.io/develop/quick-reference/prerelease#nightly-releases>`_를 참조하세요.패키지 인덱스에서 최신 Streamlit 버전을 설치하면 즉시 사용할 수 있습니다.
Warehouse Runtime의 경우 1.22.0부터 시작하는 버전의 하위 세트로 제한됩니다.
streamlit-nightly버전은 지원되지 않습니다.Warehouse Runtime에서 최신 Streamlit 버전을 즉시 사용할 수는 없습니다.
예기치 않은 패키지 업그레이드를 방지하려면 이 페이지에 설명된 대로 앱의 종속성을 구성하세요.
Warehouse Runtime에서 지원되는 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 패키지에는 다양한 이미지 형식을 처리하기 위한 라이브러리가 필요합니다.
Container Runtime에서 Python 이외의 종속성의 경우 사전 설치된 시스템 라이브러리만 사용할 수 있습니다. Python 이외의 종속성을 추가로 설치하는 기능은 아직 지원되지 않습니다.
Warehouse Runtime에서 Python 이외의 종속성의 경우 Snowflake Anaconda 채널에서 일부 시스템 라이브러리를 사용할 수 있습니다.
종속성 선언을 위한 모범 사례¶
앱의 종속성을 선언할 때 다음 모범 사례를 고려하세요
중요한 패키지 버전을 고정합니다.
Container Runtime의 경우
pyproject.toml또는requirements.txt파일에서==연산자를 사용합니다.Warehouse Runtime의 경우
environment.yml파일에서=연산자를 사용합니다.
유연성을 위해 버전 범위를 사용합니다.
Container Runtime의 경우
pyproject.toml또는requirements.txt파일에서<,<=,>=, and>연산자를 사용합니다.Warehouse Runtime의 경우
environment.yml파일에서*와일드카드 접미사를 사용합니다.
빌드 시간을 줄이려면 종속성 목록을 최소한으로 유지합니다.
배포하기 전에 개발 단계에서 종속성 변경 사항을 테스트합니다.
종속성이 런타임의 Python 버전과 호환되는지 확인합니다.
런타임 간에 마이그레이션하거나 패키지 관리자를 변경할 때 종속성 이름을 검토합니다. 예를 들어, 일부 패키지의 이름은 Conda와 PyPI 간에 다릅니다.
패키지 |
Conda 이름 |
PyPI 이름 |
|---|---|---|
Pillow |
|
|
OpenCV |
|
|
PyYAML |
|
|
Container Runtime에 대한 종속성 관리하기¶
Container Runtime 앱은 PyPI과 같은 외부 패키지 인덱스에서 패키지를 설치하기 위해 외부 액세스 통합(EAI)이 필요합니다. EAI가 없는 경우 런타임과 함께 제공되거나 앱의 소스 파일에 포함된 패키지만 사용할 수 있습니다.
Streamlit 버전만 지정하려는 경우에도 앱에 EAI를 포함해야 합니다. EAI가 없는 경우, 사전 설치된 패키지에서 버전 지정자를 사용하려고 시도하면 런타임 기본 이미지가 업데이트될 때 오류가 발생할 수 있습니다. 이는 버전 지정자가 사전 설치된 패키지와 더 이상 호환되지 않을 수 있기 때문입니다.
Container Runtime을 위한 외부 액세스 통합¶
외부 액세스 통합(EAIs)의 일반적인 개요는 외부 네트워크 액세스 개요 섹션을 참조하세요.
PyPI EAI¶
PyPI은 uv가 Container Runtime에 Python 패키지를 설치하는 데 사용하는 기본 패키지 인덱스입니다. PyPI용 EAI를 생성하려면 필요한 모든 PyPI 도메인에 대한 액세스를 허용하는 네트워크 규칙이 필요합니다. EAIs는 일반적으로 계정 관리자 또는 보안 팀이 만들고 유지 관리합니다.
예를 들어, 다음 SQL 명령은 PyPI에 대한 EAI(pypi_access_integration)를 생성하고 앱 개발 역할(app_developer_role)에 USAGE 권한을 부여합니다.
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;
EAI가 생성되면 Streamlit 오브젝트에 추가해야 합니다. 이 작업은 Snowsight 에서 또는 SQL로 수행할 수 있습니다.
Snowsight 에 로그인합니다.
탐색 메뉴에서 Projects » :ui:`Streamlit`을 선택한 후 앱을 선택합니다.
오른쪽 상단에서 |sf-vertical-more-button|(추가 옵션) |raa| :ui:`App settings`를 선택합니다.
App settings 대화 상자에서 External networks 탭을 선택합니다.
사용 가능한 EAIs 목록에서, PyPI용 EAI를 선택합니다.
변경 사항을 저장하고 대화 상자를 닫으려면 :ui:`Save`를 선택합니다.
ALTER STREAMLIT my_app SET
EXTERNAL_ACCESS_INTEGRATIONS = (pypi_access_integration);
종속성 파일¶
Container Runtime은 빠르고 안정적인 종속성 확인을 위해 uv를 사용합니다. uv는 Python 패키지를 설치하기 위한 pip처럼 작동하지만, 더 성능이 뛰어나고 사용자 지정이 가능합니다. uv의 기능에 대한 자세한 내용은 uv 설명서의 `기능<https://docs.astral.sh/uv/getting-started/features/>`_ 개요를 참조하세요.
Container Runtime은 앱의 진입점 파일과 동일한 디렉터리에서 종속성 파일을 검색합니다. 종속성 파일을 찾을 수 없는 경우 앱 소스 위치의 루트에 도달할 때까지 디렉터리 트리를 계속 검색합니다. 발견된 첫 번째 종속성 파일은 앱의 종속성을 설치하는 데 사용됩니다.
동일한 디렉터리에 여러 종속성 파일이 있는 경우 다음 우선 순위에 따라 사용됩니다.
requirements.txt: Streamlit 자체를 포함하여 Streamlit 앱에 필요한 Python 패키지 및 버전을 나열합니다. :file:`requirements.txt`로 Python 버전을 구성할 수 없습니다.:file:`requirements.txt`의 형식에 대한 자세한 내용은 pip 설명서의 `요구 사항 파일 형식<https://pip.pypa.io/en/stable/reference/requirements-file-format/>`_을 참조하세요.
pyproject.toml`(권장): Python 버전 및 종속성을 관리합니다. 현재, Python 버전 3.11만 지원됩니다. :file:`pyproject.toml파일을 제공할 때 uv는uv.lock파일을 사용하여 종속성 버전을 잠급니다. 이 잠금 파일은 종속성을 업데이트할 때마다 업데이트됩니다. PyPI과 다른 패키지 인덱스를 사용하려는 경우 :file:`pyproject.toml`을 사용해야 합니다.:file:`pyproject.toml`의 형식에 대한 자세한 내용은 Python 설명서의 `pyproject.toml 작성하기<https://packaging.python.org/en/latest/guides/writing-pyproject-toml/>`_를 참조하세요.
:file:`requirements.txt`는 앱의 종속성을 선언하는 가장 간단한 방법이며 편리하게 시작할 수 있도록 제공됩니다. 그러나 고급 종속성 관리를 위해 Snowflake는 대신 :file:`pyproject.toml`을 사용할 것을 권장합니다. 예를 들어, 이를 통해 빌드를 재현할 수 있도록 종속성 버전을 잠글 수 있습니다.
팁
앱에 필요한 EAI가 할당된 경우 모든 URL에서 패키지를 설치할 수 있습니다. 인증이 필요한 URLs는 포함된 자격 증명을 지원해야 합니다.
종속성 파일에서 휠 파일로의 상대 경로를 사용하여 프로젝트 디렉터리 내에서 패키지를 설치할 수 있습니다.
사전 설치된 패키지에서 버전 지정자를 사용하는 경우 런타임 기본 이미지가 업데이트될 때 오류를 방지하기 위해 EAI를 패키지 인덱스에 추가해야 합니다.
일반적으로 진입점 파일과 종속성 파일은 프로젝트 디렉터리의 루트에 있습니다. 그러나 진입점 파일은 하위 디렉터리에 있을 수 있고 종속성 파일은 동일한 디렉터리 또는 프로젝트 루트까지의 상위 디렉터리에 있을 수 있습니다.
예를 들어, 프로젝트 디렉터리의 구조는 다음 중 하나일 수 있습니다.
source_directory/
├── requirements.txt
└── streamlit_app.py
source_directory/
├── pyproject.toml
├── streamlit_app.py
└── uv.lock
source_directory/
├── pyproject.toml
├── subdirectory/
│ └── streamlit_app.py
└── uv.lock
source_directory/
└── subdirectory/
├── pyproject.toml
├── streamlit_app.py
└── uv.lock
참고
Container Runtime은 종속성 파일이 포함된 디렉터리를 uv의 작업 디렉터리로 사용합니다. 따라서 상대 경로를 사용하여 앱 소스 파일 중에서 패키지를 설치하는 경우 경로는 종속성 파일 위치를 기준으로 해야 합니다. 패키지 소스 선언에 대한 자세한 내용은 uv 설명서의 `종속성 소스<https://docs.astral.sh/uv/concepts/projects/dependencies/#dependency-sources>`_를 참조하세요.
PyPI 종속성 파일 예제¶
pyproject.toml 파일이 uv에 유효한 형식이 되려면 name 및 ``version``이 포함되어야 하지만, 해당 값은 임의적일 수 있습니다. Container Runtime이 현재 Python 3.11만 지원하더라도 Python 버전을 설정하려면 `requires-python`을 사용합니다. ``dependencies``를 사용하여 Container Runtime에 대한 Python 패키지를 나열합니다.
팁
Streamlit을 streamlit[snowflake]``으로 설치하여 해당 Snowflake Connector 종속성(``snowflake-snowpark-python)을 포함합니다.
PyPI용 EAI가 있는 경우 다음 pyproject.toml 파일은 최소 Python 버전 3.11을 선언하고 PyPI에서 설치할 Python 패키지 5개를 포함합니다.
[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"
]
pyproject.toml`의 대안으로 :file:`requirements.txt 파일을 사용하여 앱의 종속성을 선언할 수 있습니다. 다음 requirements.txt`에는 이전 :file:`pyproject.toml 예제와 동일한 Python 패키지가 포함되어 있습니다.
streamlit[snowflake]==1.50.0
pandas>=2.0.0
plotly>5.0.0
requests>2.0.0,<3.0.0
참고
패키지 버전을 고정하려면 == 연산자를 사용해야 합니다. 버전 범위를 지정하려면 <, <=, >=, and > 연산자를 사용해야 합니다. 예를 들어, ``pandas>=2.0.0,<3.0.0``는 2.0.0과 2.99.99 사이의 모든 버전을 설치합니다. 자세한 내용은 `종속성 지정자<https://packaging.python.org/en/latest/specifications/dependency-specifiers/>`_를 참조하세요.
JFrog 종속성 파일 예제¶
시스템 관리자는 보안 강화를 위해 JFrog Artifactory와 같은 선별된 패키지 인덱스 또는 비공개 패키지 인덱스를 사용하도록 요구할 수 있습니다. 이는 Container Runtime을 위한 독점적인 기능입니다. JFrog를 통해 PyPI을 프록시하거나 사용자 지정 패키지를 호스팅하는 공용 또는 비공개 패키지 인덱스를 만들 수 있습니다. 이를 통해 Streamlit 앱에서 사용할 수 있는 패키지와 버전을 제어할 수 있습니다.
패키지 인덱스를 지정하려면 :file:`pyproject.toml`을 사용해야 합니다. 자세한 내용은 uv 설명서의 `대체 패키지 인덱스 사용하기<https://docs.astral.sh/uv/guides/integration/alternative-indexes/>`_를 참조하세요.
다음 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
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
Warehouse Runtime에 대한 종속성 관리하기¶
Warehouse Runtime은 conda를 사용하여 앱의 종속성을 관리합니다. environment.yml 파일 또는 Snowsight 의 기본 제공 패키지 선택기를 사용하여 종속성을 선언할 수 있습니다. 종속성은 Python 패키지와 Python 이외의 일부 시스템 라이브러리를 모두 포함하는 `Snowflake Anaconda 채널<https://repo.anaconda.com/pkgs/snowflake/>`_에서 설치됩니다.
Snowflake Anaconda 채널에는 Streamlit in Snowflake Warehouse Runtime에서 지원되는 버전보다 더 많은 버전의 Streamlit이 포함되어 있습니다. 호환성 문제를 방지하려면 :ref:`label-streamlit_supported_libraries`에 나열된 Streamlit 버전만 사용합니다. 그렇지 않으면 Snowflake Anaconda 채널에서 사용 가능한 다른 패키지를 설치할 수 있습니다.
environment.yml 파일¶
environment.yml 파일을 사용하여 Warehouse Runtime 환경에 종속 항목을 설치하려면 앱 소스 위치의 루트에 파일을 만들거나 편집합니다. environment.yml 파일을 제공하지 않는 경우 Snowflake는 선택한 환경에 대해 사전 설치된 패키지만 사용합니다. :file:`environment.yml`의 구조에 대한 자세한 내용은 `conda 설명서<https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#creating-an-environment-file-manually>`_를 참조하세요.
Streamlit in Snowflake Warehouse Runtime에서 environment.yml 파일을 사용하는 경우 다음 제한 사항이 적용됩니다.
Snowflake Anaconda 채널만 사용하여 패키지를 설치할 수 있습니다.
:ref:`label-streamlit_supported_libraries`에 나열된 Streamlit 버전만 사용할 수 있습니다.
dependencies섹션에서pip패키지를 선언할 수 없습니다(로컬 패키지에 대한 상대 경로 포함).
다음 :file:`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
Snowflake에서는 Streamlit의 새 버전이 Snowflake Anaconda Channel에서 제공될 때 앱이 업그레이드되지 않도록 Streamlit 버전을 고정할 것을 권장합니다.
참고
패키지 버전을 고정하려면 = 연산자를 사용해야 합니다. 버전 범위를 지정하려면 * 와일드 카드를 사용해야 합니다. 예를 들어, ``pandas=2.*``는 2.0.0에서 2.99.99 사이의 모든 버전의 pandas를 설치합니다.
conda를 사용한 로컬 개발¶
conda를 사용하여 로컬에서 Warehouse Runtime 앱을 개발하는 경우 :file:`environment.yml`에 추가 세부 정보를 포함하여 종속성이 올바르게 설치되었는지 확인해야 합니다.
해당 URL:``https://repo.anaconda.com/pkgs/snowflake``로 Snowflake Anaconda 채널을 식별합니다.
기본 채널을 차단합니다.
environment.yml 파일에서 다음 두 채널을 사용합니다.
channels:
- https://repo.anaconda.com/pkgs/snowflake
- nodefaults
``defaults``가 ~/.condarc 파일에 표시되는 경우 주석 처리합니다.
channels:
# - defaults
Snowsight 패키지 선택기¶
Warehouse Runtime 앱에 environment.yml 파일을 직접 편집하는 작업 외에도 Snowsight 에서 기본 제공 패키지 선택기를 사용하여 앱 환경에서 패키지를 추가하거나 제거할 수 있습니다. 패키지 선택기는 Warehouse Runtime을 사용하는 앱에서만 사용할 수 있습니다. 또한 패키지 선택기는 앱의 현재 Python 버전과 호환되는 패키지만 표시합니다. Python 버전과 무관한 일부 시스템 라이브러리는 패키지 선택기에 표시되지 않을 수 있으며 :file:`environment.yml`에 수동으로 추가해야 합니다.
Snowsight 에 로그인합니다.
탐색 메뉴에서 Projects » :ui:`Streamlit`을 선택한 다음 Streamlit 앱을 선택합니다.
오른쪽 위 모서리에서 Edit 을 선택합니다.
편집기 창의 왼쪽 상단에서 :ui:`Packages`를 선택합니다.
Anaconda Packages 탭이 선택된 드롭다운 창이 나타납니다.
다음 작업 중 하나를 수행합니다.
Python 버전을 설정하려면 Python version 선택기에서 원하는 버전을 선택합니다.
패키지를 추가하려면 검색 창을 사용하여 이름별로 패키지를 찾은 후 원하는 패키지를 선택합니다.
패키지를 제거하려면 Installed Packages 섹션에서 패키지 버전 오른쪽에 있는 x 아이콘을 선택합니다.
설치된 패키지의 버전을 설정하려면 Installed Packages 섹션에서 패키지 이름 옆의 버전 선택기를 사용합니다.
Snowflake는
environment.yml파일을 자동으로 업데이트하고 앱을 재부팅합니다. 편집기에environment.yml파일이 있는 경우 페이지를 새로 고쳐 변경 사항을 확인합니다.