Streamlit 앱 파일 구성하기

Streamlit in Snowflake 에 앱을 배포할 때, 앱의 진입점 파일은 표준 파일 명명 규칙을 따르는 모든 이름을 가질 수 있으며 앱의 소스 디렉터리의 어느 곳에나 위치할 수 있습니다. 앱의 소스 디렉터리에는 페이지 스크립트, Python 모듈, 미디어 파일, 구성 파일과 같은 추가 파일이 포함될 수 있습니다.

앱 소스 디렉터리의 루트는 Streamlit의 작업 디렉터리입니다. 앱을 로컬에서 개발하고 실행하는 경우, 이는 소스 디렉터리의 루트에서 streamlit run 명령을 실행하여 모든 경로가 올바른지 확인해야 함을 의미합니다.

Snowsight 에서 Streamlit 앱을 초기화하거나 소스 위치를 지정하지 않고 CREATE STREAMLIT을 사용하는 경우, Streamlit 오브젝트의 포함된 스테이지는 루트에 진입점 파일을 포함합니다. 파일 탐색기를 사용하여 파일을 더 추가할 수 있습니다. 진입점 파일의 이름을 바꾸거나 이동해야 하는 경우 SQL 명령을 사용하여 Streamlit 오브젝트의 MAIN_FILE 값을 업데이트해야 합니다.

참고

ROOT_LOCATION 매개 변수와 CREATE STREAMLIT 명령을 사용하는 경우 앱은 Warehouse Runtime만 사용할 수 있으며 추가적인 제한 사항이 적용됩니다. 이 페이지에서는 FROM 매개 변수로 만든 앱을 다룹니다. 자세한 내용은 다양한 유형의 Streamlit 오브젝트 이해하기 섹션을 참조하십시오.

Container Runtime 파일 구조

Container Runtime을 사용하는 경우 진입점 파일은 표준 파일 명명 규칙을 따르는 모든 이름을 가질 수 있으며 소스 디렉터리의 어느 곳에나 위치할 수 있습니다. 그러나 Streamlit v1.36에서 |st.navigation|이 도입됨에 따라, 페이지 이름을 파일 이름에서 유추할 필요가 없으므로 가장 일반적인 방법은 ``streamlit_app.py``를 진입점 파일로 사용하는 것입니다.

Snowflake는 소스 디렉터리의 루트에서 streamlit run 명령을 실행해야 하므로 그에 따라 경로를 처리해야 합니다.

  • 진입점 파일은 임의의 이름을 가질 수 있으며 소스 디렉터리의 어느 곳에나 위치할 수 있습니다.

  • 종속성 파일은 소스 디렉터리의 루트와 진입점 파일이 포함된 디렉터리 사이의 모든 디렉터리에 있을 수 있습니다. 자세한 내용은 Streamlit 앱의 종속성 관리하기 섹션을 참조하십시오.

  • 소스 디렉터리의 루트와 진입점 파일이 포함된 디렉터리 사이에는 하나 이상의 .streamlit/ 디렉터리가 있을 수 있습니다.

  • 소스 디렉터리의 루트는 Streamlit의 작업 디렉터리입니다.

다음 디렉터리 구조는 Container Runtime 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

다음 디렉터리 구조는 각각 고유한 진입점 파일과 종속성이 있는 하나의 소스 디렉터리에 있는 두 개의 앱을 보여줍니다. 이 예제에는 두 개의 서로 다른 Streamlit 오브젝트가 있습니다. 두 Streamlit 오브젝트 모두 FROM을 source_directory`로 표시되는 위치로 설정하지만 오브젝트는 MAIN_FILE을 서로 다른 :file:`streamlit_app.py 파일로 설정합니다. 첫 번째 앱은 종속성을 위해 pyproject.toml``을 사용하지만 번째 앱은 ``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 기능에는 작업 디렉터리에 대한 상대 경로가 필요한 반면, 다른 기능에는 진입점 파일에 대한 상대 경로가 필요합니다.

일반적으로 앱 내의 이미지 및 기타 미디어에 대한 경로는 작업 디렉터리(소스 디렉터리의 루트)를 기준으로 해야 합니다. 그러나 다중 페이지 앱의 다른 페이지에 대한 경로는 진입점 파일의 위치를 기준으로 합니다.

혼동을 방지하려면 진입점 파일이 소스 디렉터리의 루트에 있도록 앱 파일을 구성하는 것이 좋습니다. 하나의 Git 리포지토리에 여러 앱을 저장하고 Streamlit 오브젝트를 생성할 때 하위 디렉터리를 FROM 매개 변수에 전달할 수 있습니다. 그러면 해당 하위 디렉터리가 앱의 소스 디렉터리가 됩니다. 이전 예제에서 이는 FROM 매개 변수에 source_directory/app_one``source_directory/app_two``를 사용하는 것을 의미합니다. 이 경우 앱은 ``source_directory/utils``의 공유 모듈에 액세스할 수 없게 됩니다.

Warehouse Runtime 파일 구조

Warehouse Runtime을 사용하는 경우 진입점 파일은 임의의 이름을 가질 수 있지만 소스 디렉터리의 루트에 있어야 합니다. Python 버전 및 종속성은 소스 디렉터리의 루트에 있는 environment.yml 파일에 지정됩니다. environment.yml 파일을 포함하지 않는 경우 앱은 현재 Streamlit in Snowflake 에서 지원되는 최신 버전의 Python 및 최신 버전의 Streamlit에서 실행됩니다. Snowsight 의 패키지 선택기<label-snowsight_streamlit_package_picker>`를 사용하여 패키지를 추가하면 :code:`environment.yml 파일이 자동으로 업데이트되거나 생성됩니다.

다음 디렉터리 구조는 Warehouse Runtime 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 매개 변수를 사용하여 각 앱으로 가져올 수 있습니다. 그러나 이는 Warehouse Runtime을 사용하는 앱에만 지원됩니다.

다중 페이지 앱

Streamlit은 다중 페이지 앱을 만드는 두 가지 방법을 지원합니다.

  • st.navigation 사용하기: st.navigation 명령을 사용하여 앱 내에서 사용자 지정 탐색 구조를 생성합니다. 이를 통해 프로그래밍 방식으로 페이지를 정의하고 탐색 흐름을 제어할 수 있습니다. 진입점 파일은 페이지 라우터 역할을 하며 앱의 페이지는 소스 디렉터리의 어느 곳에서나 함수 또는 Python 스크립트로 정의할 수 있습니다. 이는 가장 유연하므로 다중 페이지 앱을 만들 때 권장되는 방법입니다.

  • pages/ 디렉터리 사용하기: 앱의 진입점 파일 옆에 pages/``라는 디렉터리를 만들 있습니다. 진입점 파일은 앱의 홈페이지로 처리됩니다. ``pages/ 디렉터리의 각 Python 파일은 앱에서 추가 페이지로 처리됩니다. 페이지 이름은 파일 이름에서 파생됩니다.

다중 페이지 앱을 만드는 두 가지 방법은 혼합하여 사용할 수 없습니다. 다중 페이지 앱에 대한 자세한 내용은 Streamlit 설명서의 `다중 페이지 앱 개요<https://docs.streamlit.io/develop/concepts/multipage-apps/overview>`_를 참조하세요.

참고

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 오브젝트를 업데이트해야 합니다. 진입점 파일을 하위 디렉터리로 이동하는 경우 Container Runtime을 사용해야 합니다.

  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``로 변경합니다.