13강 구현 중심 ⏱ 약 20분

 

0. 학습 목표

→ 지금까지 배운 전 과정을 한 번에 통과하며 시리즈를 마무리합니다.

더보기

0.1 이번 글에서 다룰 내용

이번 글은 구현 중심 강의이자 시리즈의 마지막 강의입니다.

 

12강에서 프로젝트를 받아 실행하기까지의 표준 5단계를 정리했습니다.

이번 강의에서는 그 흐름을 실제로 통과합니다. 새 개념은 없습니다.

 

11강에서 만든 Project를 "동료에게서 공유받은 프로젝트"로 가정하고,

받는 사람 입장이 되어 python main.py 실행까지 도달하는 것이 목표입니다.

 

이것이 0강에서 약속한 시리즈 전체의 성공 기준입니다 

내가 만든 프로젝트를 새 환경으로 가져가 정상 실행하면, 가상환경과 환경 재현을 모두 이해한 것입니다.

공유받은 것 (소스 코드 + requirements.txt)
        ↓
1. 프로젝트 가져오기 (clone 대신 폴더 시뮬레이션)
        ↓
2. python3.13 -m venv .venv       (가상환경 새로 생성)
        ↓
3. source .venv/bin/activate      (활성화)
        ↓
4. pip install -r requirements.txt (패키지 복원)
        ↓
5. python main.py                 (실행)
        ↓
프로그램 창이 뜬다                 ← 시리즈 전체의 최종 성공 지점
구분 내용
이해할 것 공유받은 프로젝트가 실행되기까지 각 단계가 하는 역할의 연결
만들 것 공유받은 상황을 재현한 ~/Dev/Shared_Project + 새 가상환경 + 실행되는 main.py
확인할 것 소스 코드와 requirements.txt만으로 프로그램이 정상 실행되는지 (GUI 창 표시)

 

 

 

 

0.2 이번 강의에서 직접 다루는 구조

11강의 Project에서 공유 대상(소스 코드 + requirements.txt)만 꺼내 새 폴더로 옮기는 것에서 시작합니다.

~/Dev/
├── Project/                     ← 유지 (11강 — 원본 프로젝트)
│   ├── .venv/                       (공유하지 않음)
│   ├── main.py                      (공유 대상)
│   └── requirements.txt             (공유 대상)
└── Shared_Project/              ← ➕ 이번 강의에서 생성 (공유받은 상황 재현)
    ├── main.py                  ← ➕ Project에서 가져옴
    ├── requirements.txt         ← ➕ Project에서 가져옴
    └── .venv/                   ← ➕ 여기서 새로 생성 (복사 아님)

(➕ 새로 생성 · ✏️ 수정 · 표시 없음은 변경 없음)

 

1. 실행 가능한 프로젝트로 준비하기

→ 실행을 확인하려면 내용이 있는 main.py가 필요하므로, 최소한의 실행 코드를 채웁니다.

더보기

11강에서 만든 main.py는 빈 파일이었습니다.

이번에는 "실행된다"를 눈으로 확인해야 하므로, Project의 main.py에 PySide6로 창을 하나 띄우는 최소 코드를 채웁니다.

 

 

먼저 11강의 Project로 이동해 가상환경을 활성화합니다.

cd ~/Dev/Project
source .venv/bin/activate      # 11강에서 만든 가상환경 (없으면 11강 먼저 진행)

 

 

main.py를 편집기로 열어(nano main.py) 아래 코드를 붙여넣습니다. 창을 하나 띄우고 안내 문구를 보여주는 짧은 프로그램입니다. 이 강의의 주제는 코드 작성이 아니라 환경 재현이므로, 내용은 그대로 사용하면 됩니다.

import sys
from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout   # 9강에서 설치한 PySide6 사용

app = QApplication(sys.argv)          # GUI 애플리케이션 생성

window = QWidget()                    # 빈 창 하나 생성
window.setWindowTitle("환경 재현 성공")   # 창 제목
window.resize(360, 160)

layout = QVBoxLayout()
layout.addWidget(QLabel("이 창이 보이면 환경 재현에 성공한 것입니다."))   # 창 안에 안내 문구
window.setLayout(layout)

window.show()                         # 창 표시
sys.exit(app.exec())                  # 이벤트 루프 시작 (창이 닫힐 때까지 유지)

 

 

저장하고(nano에서 Ctrl+O → Enter, Ctrl+X) 원본 프로젝트에서 잘 실행되는지 먼저 확인합니다.

python main.py      # 원본 환경에서 실행 — 창이 떠야 함

"환경 재현 성공"이라는 제목의 창이 뜨면 원본 프로젝트가 정상 상태라는 뜻입니다.

창을 닫고 다음으로 넘어갑니다. 이제 이 프로젝트를 다른 사람에게 공유하는 상황을 만들 차례입니다.

✔ 확인 기준: python main.py 실행 시 창이 뜨면 준비 완료입니다. ModuleNotFoundError: No module named 'PySide6'가 나오면 가상환경이 활성화되지 않았거나(프롬프트의 (.venv) 확인) PySide6가 설치되지 않은 것이니 11강을 먼저 확인하세요.

 

2. 공유받은 상황 만들기

→ 공유 대상만 새 폴더로 옮겨, 프로젝트를 처음 받은 사람의 출발점을 재현합니다.

더보기

실제 협업이라면 12강에서 본 대로 git clone으로 GitHub에서 내려받습니다.

여기서는 GitHub 계정 없이도 원리를 확인할 수 있도록, 공유 대상만 새 폴더로 복사하는 방식으로 시뮬레이션합니다.

핵심은 10강의 기준을 그대로 지키는 것 — 소스 코드와 requirements.txt는 가져오고, .venv는 가져오지 않습니다.

deactivate                                          # Project 가상환경에서 빠져나옴
mkdir -p ~/Dev/Shared_Project
cd ~/Dev/Shared_Project

cp ~/Dev/Project/main.py .                           # 소스 코드 가져오기 ⭕
cp ~/Dev/Project/requirements.txt .                  # 재설치 설명서 가져오기 ⭕
# .venv 는 복사하지 않는다 ❌ (10강에서 배운 원칙)

 

 

지금 이 폴더의 상태를 확인합니다. 받은 사람이 프로젝트를 막 열었을 때의 모습입니다.

ls -a      # 현재 폴더의 파일 목록 (-a: 숨김 파일 포함)
.  ..  main.py  requirements.txt      ← 소스 코드와 목록만 있고 .venv는 없음

이 상태에서 곧바로 python main.py를 실행하면 어떻게 될까요? 실행되지 않습니다.

가상환경도 없고 PySide6도 설치되지 않았기 때문입니다.

이것이 12강에서 말한 "받자마자 실행하면 안 되는" 이유이며, 지금부터 3번의 복원 과정이 필요한 이유입니다.

 

3. 환경 복원하고 실행하기

→ 새 가상환경을 만들고 패키지를 복원한 뒤, 프로그램을 실행합니다.

더보기

3.1 새 가상환경 생성과 패키지 복원

12강의 5단계 중 2~4단계입니다.

Shared_Project 폴더에서 새 가상환경을 만들고, 활성화한 뒤, requirements.txt로 패키지를 복원합니다.

python3.13 -m venv .venv                       # 2단계: 이 폴더에 새 가상환경 생성
source .venv/bin/activate                       # 3단계: 활성화
python -m pip install -r requirements.txt       # 4단계: 목록대로 패키지 복원

4단계에서 pip가 requirements.txt를 읽어 PySide6와 의존성을 기록된 버전 그대로 설치합니다.

11강에서 Project_New를 만들 때와 완전히 같은 절차입니다.

 

 

 

 

3.2 실행하기

이제 마지막 5단계입니다. 이 폴더에는 원래 .venv가 없었지만, 방금 새로 만들고 채웠습니다.

python main.py      # 5단계: 실행

 

 

"환경 재현 성공" 창이 뜨면 — 시리즈 전체가 완성된 것입니다. Shared_Project는 소스 코드와 requirements.txt라는 가벼운 파일 두 개만 받았는데도, Project와 동일하게 동작하는 완전한 환경을 자기 폴더 안에 갖추게 되었습니다.

Shared_Project가 받은 것
→ main.py + requirements.txt          (텍스트 몇 KB)

Shared_Project가 스스로 만든 것
→ .venv + PySide6 (수백 MB)            (requirements.txt 기준으로 재생성)

결과
→ Project와 동일하게 실행됨            ← 옮긴 것은 목록, 재현된 것은 환경 전체

 

 

 

 

3.3 시리즈 전체 되돌아보기

이번 한 번의 실습에 시리즈에서 배운 모든 개념이 들어 있었습니다.

이번 실습의 동작 어디서 배웠나
시스템 Python을 건드리지 않고 .venv에서만 작업 2강 (시스템 Python 보호)
python3.13 -m venv로 버전 지정 생성 4·5·6강 (가상환경·버전 설치)
import PySide6로 패키지 사용 7강 (모듈·패키지·import)
같은 버전 조합으로 동일 동작 보장 8강 (호환성)
가상환경 안에 패키지 격리 설치 9강 (패키지 설치·검증)
.venv는 옮기지 않고 목록만 공유·복원 10·11강 (requirements.txt)
공유받은 프로젝트를 받아 실행하는 전체 흐름 12강 (협업 구조)

✔ 확인 기준: Shared_Project에서 python main.py 실행 시 "환경 재현 성공" 창이 뜨면 — 이 시리즈의 모든 목표를 달성한 것입니다. 창이 뜨지 않고 ModuleNotFoundError가 나오면 프롬프트에 (.venv)가 있는지, 3.1의 pip install -r이 오류 없이 끝났는지 확인하세요. 버전 관련 오류라면 새 가상환경의 python --version이 3.13.x인지 확인합니다.

 

문법을 배우는 것에서 시작해,

이제 여러분은 프로젝트를 어떤 환경에서든 동일하게 실행하고 다른 사람과 공유할 수 있게 되었습니다.

 

1강에서 이야기한 "코드가 실행되는지"를 넘어 "코드가 실행될 환경까지 관리하는" 개발자의 관점 — 그 출발점에 선 것입니다. 여기서 다룬 가상환경과 requirements.txt는 앞으로 만들 모든 Python 프로젝트의 기본 토대가 됩니다.