★ 11. [Ubuntu] 패키지 공유 구현

0. 학습 목표
이번 단계에서는 Python 프로젝트에서 사용하는 패키지 목록을 requirements.txt 파일로 저장하고, 다른 환경에서 동일한 패키지를 다시 설치하는 방법을 학습합니다.
여기서 중요한 점은 가상환경 폴더를 직접 공유하지 않는다는 것입니다. 대신 현재 프로젝트에 필요한 패키지 목록만 requirements.txt로 저장하고, 새 환경에서 그 목록을 기준으로 패키지를 다시 설치합니다.
| 학습 목표 | 내용 |
|---|---|
| 패키지 목록 저장 | 현재 가상환경에 설치된 패키지 목록을 requirements.txt로 저장합니다. |
| 패키지 목록 공유 | requirements.txt 파일을 프로젝트와 함께 공유합니다. |
| 새 환경에서 패키지 복원 | 새 가상환경에서 requirements.txt를 기준으로 패키지를 다시 설치합니다. |
| 가상환경 공유 금지 이해 | .venv, venv 폴더를 직접 옮기지 않는 이유를 이해합니다. |
1. 파이썬 프로젝트 준비
1단계: 테스트 폴더를 생성합니다.
mkdir -p ~/Dev/Project
cd ~/Dev/Project

Project 폴더는 앞으로 작성할 Python 소스코드와 가상환경, 그리고 패키지 목록 파일을 함께 관리하는 작업 폴더입니다.
2단계: python3.13로 가상환경 생성
Python 프로젝트에서는 프로젝트마다 독립된 실행 환경을 만들기 위해 가상환경을 사용합니다.
python3.13 -m venv .venv

3단계: 가상환경 활성화
source .venv/bin/activate

가상환경이 활성화되면 터미널 앞부분에 보통 다음과 같이 (.venv) 표시가 나타납니다.
4단계: 외부 패키지 설치
GUI 화면을 만들기 위해 PySide6가 필요하고,
MySQL 데이터베이스에 연결하기 위해 mysql-connector-python이 필요하다고 가정합니다.
아래 명령어로 두 패키지를 설치합니다.
python -m pip install PySide6 mysql-connector-python

5단계: 로직 구현 예시
touch main.py
touch database.py
touch window.py


각 파일의 로직을 다음과 같이 나누어 생각할 수 있습니다.
| 파일명 | 역할 |
|---|---|
main.py |
프로그램을 실행하는 시작 파일입니다. |
window.py |
PySide6를 사용하여 GUI 화면을 구성하는 파일입니다. |
database.py |
MySQL 데이터베이스 연결 코드를 작성하는 파일입니다. |
2. requirements.txt 생성하기
6단계: 패키지 목록 저장
가상환경이 정상적으로 활성화되어 있는 상태에서 다음 명령을 입력합니다.
python -m pip freeze > requirements.txt

이 명령은 현재 가상환경에 설치된 패키지 목록을 requirements.txt 파일에 저장합니다.
예시 결과입니다.


이렇게 생성된 requirements.txt 파일은 프로젝트를 공유할 때 함께 전달합니다.
3. requirements.txt로 패키지 설치하기
3.1. 새 프로젝트 환경 준비
폴더 생성
mkdir -p ~/Dev/Project_New
cd ~/Dev/Project_New
새 가상환경 생성
python3.13 -m venv .venv
가상환경 활성화
source .venv/bin/activate

3.2. requirements.txt 준비
새 환경에서는 프로젝트 파일과 `requirements.txt`를 함께 준비합니다.
Project_New
├── .venv
└── requirements.txt

3.3. requirements.txt 기준으로 패키지 설치
이제 requirements.txt를 기준으로 패키지를 설치합니다.
python -m pip install -r requirements.txt

이 명령은 requirements.txt 안에 적힌 패키지와 버전을 현재 가상환경에 설치합니다.
설치 위치
→ .venv/lib/python3.x/site-packages

4. 정리
기존 프로젝트
→ 가상환경 활성화
→ python -m pip freeze > requirements.txt
→ requirements.txt 공유
새 프로젝트 환경
→ 새 가상환경 생성
→ 가상환경 활성화
→ python -m pip install -r requirements.txt
→ 패키지 설치 확인
→ python main.py 실행
| 구분 | 명령어 | 의미 |
|---|---|---|
| 패키지 목록 저장 | python -m pip freeze > requirements.txt |
현재 가상환경의 패키지 목록 저장 |
| 패키지 재설치 | python -m pip install -r requirements.txt |
목록을 기준으로 패키지 설치 |
| 패키지 확인 | python -m pip show 패키지명 |
설치 여부와 설치 위치 확인 |
학습 포인트
Python 프로젝트에서 패키지를 공유할 때는 가상환경 폴더를 직접 복사하지 않습니다.
requirements.txt를 사용해 패키지 목록만 공유하고, 새 환경에서 패키지를 다시 설치하는 것이 안전합니다.