티스토리 뷰

카테고리 없음

python환경 셋팅

정두현의아이티세상 2026. 10. 13. 23:08

2. venv 환경에서 requirements.txt 생성

2-1. 기존 가상환경 활성화

Windows 명령 프롬프트(CMD) 기준입니다.

cd C:\korail_ai

venv\Scripts\activate

활성화되면 다음과 같이 표시됩니다.

(venv) C:\korail_ai>

설치된 패키지 확인:

python -m pip list

2-2. requirements.txt 파일 생성

python -m pip freeze > requirements.txt

생성된 파일의 예시는 다음과 같습니다.

streamlit==1.50.0
openai==2.3.0
pandas==2.3.3
numpy==2.3.3
python-dotenv==1.1.1

위 버전은 형식 설명용 예시이며, 실제 파일에는 현재 가상환경에 설치된 패키지와 버전이 기록됩니다.

주요 명령어:

명령어설명
pip list 설치된 패키지 목록
pip freeze 패키지와 버전 출력
pip freeze > requirements.txt 설치 목록 파일 생성
pip install -r requirements.txt 패키지 일괄 설치
pip install --upgrade openai OpenAI 패키지 업데이트
pip check 패키지 의존성 충돌 확인

주의: pip freeze는 현재 환경의 모든 설치 패키지를 기록합니다. JupyterLab과 다른 실습 패키지가 포함되어 있다면 배포에 불필요한 패키지도 함께 설치될 수 있습니다.

3. 다른 PC에서 동일한 Python 환경 구성

3-1. 프로젝트 파일 복사

개발 PC에서 아래 파일을 다른 PC로 복사합니다.

korail_ai/
│
├── app.py
├── requirements.txt
└── .env.example

venv 폴더는 복사하지 않습니다. 운영체제와 Python 설치 경로에 영향을 받기 때문에 대상 PC에서 새로 생성하는 것이 좋습니다.

3-2. 새 PC에서 venv 생성

먼저 개발 PC와 동일한 Python 버전을 설치합니다. 예를 들어 Python 3.11을 사용한다면:

cd C:\korail_ai

py -3.11 -m venv venv

가상환경 활성화:

venv\Scripts\activate

3-3. requirements.txt로 패키지 설치

python -m pip install --upgrade pip

python -m pip install -r requirements.txt

설치 확인:

python -m pip check

python -m pip show streamlit openai

이제 개발 PC와 동일한 버전의 Python 패키지를 설치할 수 있습니다. 다만 운영체제, CPU 아키텍처, Python 버전, 시스템 라이브러리까지 같아야 완전히 동일한 실행 환경에 가까워집니다.

4. Streamlit 서버를 외부 PC에서 접속하도록 설정

4-1. 기본 실행

streamlit run app.py

기본적으로 다음 주소로 접속할 수 있습니다.

http://localhost:8501

localhost는 현재 실행 중인 PC 자신을 의미합니다.

4-2. 외부 PC 접속 허용

streamlit run app.py --server.address 0.0.0.0 --server.port 8501

주요 옵션:

옵션설명
--server.address 0.0.0.0 모든 네트워크 인터페이스에서 연결 수신
--server.port 8501 웹서버 포트 지정
--server.headless true 서버 실행 시 브라우저 자동 실행 방지

0.0.0.0은 서버의 수신 주소이지 사용자가 브라우저에 입력하는 접속 주소는 아닙니다.

4-3. 서버 IP 확인

서버 PC에서 CMD를 실행합니다.

ipconfig

예를 들어 서버 IP가 192.168.0.100이라면 외부 PC에서 다음 주소를 입력합니다.

http://192.168.0.100:8501

4-4. Windows 방화벽 설정

관리자 권한 CMD에서 다음 명령을 실행합니다.

netsh advfirewall firewall add rule name="Streamlit 8501" dir=in action=allow protocol=TCP localport=8501 profile=private

이 규칙은 Private 네트워크 프로필에 적용됩니다. 실제 운영 시에는 허용할 클라이언트 IP도 제한하는 것이 안전합니다.

외부 접속 시 확인할 사항

  1. Streamlit 서버가 정상 실행 중인지 확인

  2. 서버와 사용자 PC가 서로 통신 가능한 네트워크인지 확인

  3. Windows 방화벽에서 TCP 8501 허용 여부 확인

  4. 서버 IP 주소와 포트가 정확한지 확인

사내망이 아닌 인터넷에서 접속할 경우에는 8501 포트를 직접 공개하기보다 HTTPS 리버스 프록시(Nginx/Caddy), 인증, 접근제어를 구성하는 것을 권장합니다.

5. Streamlit + OpenAI 채팅 애플리케이션 구현

5-1. 패키지 설치

pip install streamlit openai python-dotenv

5-2. API Key 설정

프로젝트 폴더에 .env 파일을 생성합니다.

OPENAI_API_KEY=본인의_OpenAI_API_KEY

.env.example에는 실제 키 대신 다음처럼 작성합니다.

OPENAI_API_KEY=your-api-key-here

실제 .env 파일은 다른 PC로 배포하거나 Git에 업로드하지 않습니다. 각 서버에서 별도로 설정해야 합니다.

5-3. 전체 Python 소스: app.py

다음 예제는 아래 기능을 포함합니다.

  • OpenAI API 연동

  • Streamlit 채팅 화면 구현

  • 사용자 질문 입력

  • AI 답변 출력

  • 이전 대화 내용 유지(Session State)

  • 모델 선택

  • 대화 초기화

  • API 오류 처리

import osimport streamlit as stfrom dotenv import load_dotenvfrom openai import OpenAI# 1. 환경변수 로드load_dotenv()API_KEY = os.getenv("OPENAI_API_KEY")# 2. Streamlit 화면 설정st.set_page_config(    page_title="Korail AI Chatbot",    page_icon="🚆",    layout="centered")st.title("🚆 Korail AI Chatbot")st.caption("Streamlit + OpenAI 채팅 실습")# 3. API Key 확인if not API_KEY:    st.error("OPENAI_API_KEY가 설정되지 않았습니다.")    st.stop()# 4. OpenAI 클라이언트 생성client = OpenAI(api_key=API_KEY)# 5. 사이드바 설정with st.sidebar:    st.header("채팅 설정")    model = st.selectbox(        "AI 모델 선택",        ["gpt-4o-mini", "gpt-4o"]    )    # 대화 초기화 버튼    if st.button("대화 초기화"):        st.session_state.messages = []        st.rerun()# 6. 최초 실행 시 대화 저장 공간 생성if "messages" not in st.session_state:    st.session_state.messages = []# 7. 이전 대화 화면 출력for message in st.session_state.messages:    with st.chat_message(message["role"]):        st.markdown(message["content"])# 8. 사용자 질문 입력prompt = st.chat_input("질문을 입력하세요.")if prompt:    # 사용자 메시지 저장    st.session_state.messages.append({        "role": "user",        "content": prompt    })    # 사용자 메시지 출력

실습용 코드이므로 오류 원문을 출력하지만, 실제 운영 환경에서는 사용자에게 내부 오류 상세를 노출하지 않고 서버 로그에 기록하는 방식이 적합합니다.

5-4. 프로그램 실행

streamlit run app.py --server.address 0.0.0.0 --server.port 8501

6. 실행 화면 예시

Korail AI Chatbot

Demo
KTX 승차권을 변경하는 방법을 알려줘.

AI Assistant

승차권 변경은 구매 경로와 승차권 상태에 따라 절차가 달라질 수 있습니다. 코레일톡 앱 또는 공식 홈페이지에서 예약 내역을 확인해 주세요. 변경이 어려운 경우 환불 후 재구매가 필요할 수 있습니다.

 
화면 구성 예시이며, 실제 OpenAI API 연결은 위 Python 코드에서 수행됩니다.

7. Streamlit 채팅에 사용되는 핵심 함수

함수설명
st.title() 화면 제목
st.chat_input() 채팅 입력창
st.chat_message("user") 사용자 채팅 말풍선
st.chat_message("assistant") AI 답변 말풍선
st.session_state 대화 기록 저장
st.markdown() 채팅 메시지 출력
st.spinner() AI 응답 대기 표시
st.selectbox() AI 모델 선택
st.button() 버튼 생성
st.rerun() 화면 재실행

특히 st.session_state.messages는 Streamlit이 사용자 입력 때마다 스크립트를 다시 실행하더라도 현재 세션의 이전 대화 내용을 유지하는 역할을 합니다. 서버를 재시작하거나 세션이 종료되면 대화가 사라질 수 있으므로 영구 보관하려면 별도의 DB가 필요합니다.

8. 다른 PC로 배포하는 전체 명령어 요약

개발 PC

cd C:\korail_ai
venv\Scripts\activate
python -m pip freeze > requirements.txt

배포 PC

cd C:\korail_ai

py -3.11 -m venv venv

venv\Scripts\activate

python -m pip install -r requirements.txt

python -m pip check

streamlit run app.py --server.address 0.0.0.0 --server.port 8501

사용자 PC

http://192.168.0.100:8501

IP 주소는 실제 서버의 주소로 변경합니다. 

댓글