13강. 프로젝트 공유 통합 실습

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 프로젝트의 기본 토대가 됩니다.