Streamlit - 파일 분리하여 다루기

반응형

이 글은 Python언어와 Visual Studio Code, GitHub Desktop을 기반으로 작성되었습니다.


# 파일을 여러개로 분리하여 관리하기

하나의 소스 코드 파일로는 문제가 발생하면 수정시 긴 내용을 읽어야 하는 가독성으로 인한 시간 지연과

하나의 파일이므로 잘못 수정시 안정성의 문제로 치명적 손상을 입을 수 있습니다.

그렇기 떄문에 프로그램의 안정성을 고려하여 특정 기능을 하는 함수들을 파일화하여

하나의 메인 파일에 집약해 사용하는 것을 권장합니다.

이렇게 사용하면 특정 기능들이 문제가 되어도 해당 서브 파일만 수정하면 되서 유지성이 상승합니다.

이번 글에서는 메인 파일에서 서브 파일을 이용하여 다루는 것을 설명합니다.


# import 라이브러리 를 우리가 직접 정의한 파일로 호출하기

기존에 사용하던 소스 코딩의 방법과 같습니다.

다만, 특정 기능을 수행하는 함수를 만들어 파일로 저장한 후 메인 파일에서 import를 진행하면 됩니다.

streamlit.write, pandas.DataFrame() 등등, 우리는 라이브러리의 함수를 이용하는 방법을 알고 있습니다.

같은 방식으로 우리가 만든 파일의 함수를 이용해봅시다.

 

  • 혹시 주피터 노트북으로 파이썬 모듈을 정의한다면
    주피터 노트북에서 '텍스트 파일'로 지정하여 진행해야 합니다.

관련 포스팅 : https://luvris2.tistory.com/24?category=1053610 

 

Error) jupyter notebook - module create, call error

주피터 노트북으로 모듈을 생성하고 호출시 에러가 출력된다. 결론부터 말하면 모듈을 생성할 때 '텍스트 파일'로 하여 '~~.py'로 저장하면 된다. 문제점. 주피터 노트북으로 모듈 생성 호출 부분

luvris2.tistory.com

 

사이드바에 메뉴를 두고 메뉴에 따라 보여주는 페이지가 다르게 하기

외부 파일을 사용하는 순서는 다음과 같습니다.

1. 사용될 기능들을 서브 파일화

2. 메인 파일에 서브 파일을 호출

3. 필요에 따라 서브 파일의 함수를 호출하여 기능 수행

 

즉, 지금 상황에 맞게 정리하자면

1. 메인 파일은 사이드바에 메뉴를 두기

2. 선택에 따라 보여지는 페이지는 각각의 서브 파일로 저장

3. 메인 파일은 메뉴의 선택에 따라 보여지는 파일 호출하여 페이지 보여주기


1. 메인 파일은 사이드바에 메뉴를 두기

  • 메인 파일 'test.py'
  • 소스 코드
import streamlit as st

def main() :
    st.title('파일 분리 앱')
    menu = ['Home', 'EDA', 'ML', 'About']
    choice = st.sidebar.selectbox('메뉴', menu)
    
    if choice == menu[0] :
        pass

 

  • 실행 화면


2. 선택에 따라 보여지는 페이지는 각각의 서브 파일로 저장

  • 서브 파일 : 'test_home.py'
  • 기능 : 메뉴에서 Home일 경우 나타낼 페이지 출력
  • 소스 코드
import streamlit as st

def run_home() :
    st.subheader('홈 화면입니다')
    st.text('파일 분리 앱 테스트')

 

  • 실행 화면


3. 메인 파일은 메뉴의 선택에 따라 보여지는 파일 호출하여 페이지 보여주기

  • 메인 파일 : 'test.py'
  • 서브 파일 : 'test_home.py'

 

  • 소스 코드
  • 여기서 추가 된 것은 2행의 파일 호출과 마지막행 조건문에 임포트한 파일의 함수를 실행하는 것이다.

import streamlit as st
import test_home

def main() :
    st.title(' 파일 분리 앱 ')
    menu = ['Home', 'EDA', 'ML', 'About']
    choice = st.sidebar.selectbox('메뉴', menu)

    if choice == menu[0] :
        test_home.run_home()

 

  • 실행 화면

반응형