[TOOL-003][입문] 패키지 관리자와 의존성 이해하기
페이지 정보

본문
[이번 수업]
패키지 관리자가 무엇을 설치하고 의존성을 어떻게 해결하는지 배웁니다. 외부 패키지를 내려받지 않고 프로젝트 전용 Python 환경에서 pip의 버전·설치 목록·충돌 상태를 확인합니다.
[선수지식]
TOOL-001의 개발환경과 TOOL-002의 터미널·명령어를 읽고 Python 3를 준비하세요.
[학습목표]
1. 패키지 관리자와 패키지 저장소의 역할을 설명한다.
2. 직접 의존성과 간접 의존성을 구분한다.
3. 격리 환경에서 설치 상태와 의존성 충돌을 점검한다.
[핵심개념]
패키지는 설치할 수 있게 코드와 메타데이터를 묶은 배포 단위입니다. 패키지 관리자는 저장소에서 후보를 찾고, 버전 조건과 운영체제·Python 버전 호환성을 확인해 설치·업데이트·제거를 돕습니다.
의존성은 내 프로그램이 동작하기 위해 필요한 다른 패키지입니다. 프로젝트가 A를 직접 사용하면 A는 직접 의존성입니다. A가 다시 B를 요구한다면 B는 간접 또는 전이 의존성입니다.
버전 조건은 이름 뒤에 붙는 규칙입니다. Python 패키징 규격에서 SomeProject==1.4는 한 버전, SomeProject>=1,<2는 범위를 뜻합니다. 범위가 너무 넓으면 미래 변경으로 결과가 달라질 수 있고, 무조건 한 버전에 고정하면 보안 수정 반영이 늦어질 수 있습니다. 애플리케이션은 검증된 전체 의존성 집합을 잠금 파일이나 고정된 요구사항으로 기록하고, 업데이트를 자동 테스트한 뒤 반영해야 합니다.
가상환경은 프로젝트별 Python 실행 파일과 패키지 설치 위치를 분리합니다. `python -m pip` 형태는 지금 선택한 Python의 pip를 실행한다는 뜻이므로, 다른 Python에 실수로 설치하는 일을 줄입니다.
[따라하기]
빈 package-lab 폴더를 만들어 이동한 뒤 실행하세요. 이 실습은 네트워크에 접속하거나 외부 패키지를 설치하지 않습니다.
Windows PowerShell:
mkdir package-lab
cd package-lab
py -m venv .venv
.venv\Scripts\python -m pip --version
.venv\Scripts\python -m pip list
.venv\Scripts\python -m pip check
macOS·Linux:
mkdir package-lab
cd package-lab
python3 -m venv .venv
.venv/bin/python -m pip --version
.venv/bin/python -m pip list
.venv/bin/python -m pip check
첫 명령은 격리 환경을 만듭니다. --version 결과에는 pip 버전과 .venv 안의 경로가 표시됩니다. pip list에는 최소한 pip가 보이며 Python 버전에 따라 다른 기본 항목이 있을 수 있습니다. 새 환경이 정상이라면 pip check는 보통 다음과 같이 출력합니다.
No broken requirements found.
정확한 pip 버전과 경로는 컴퓨터마다 다릅니다. 작업을 마치면 package-lab 폴더를 파일 탐색기나 Finder에서 삭제할 수 있습니다. 이 폴더 밖의 Python 설치는 바뀌지 않았습니다.
[흔한 실수]
첫째, 어떤 Python을 가리키는지 확인하지 않고 pip만 실행합니다. 둘째, 전역 환경에 모든 프로젝트 패키지를 섞습니다. 셋째, 직접 의존성만 보고 간접 의존성을 무시합니다. 넷째, 버전 범위를 기록하지 않아 다른 날 다른 조합이 설치됩니다. 다섯째, 잠금 파일만 믿고 업데이트·테스트·취약점 점검을 하지 않습니다. 여섯째, 운영체제 패키지 관리자와 언어 패키지 관리자의 파일을 서로 덮어씁니다.
[보안 주의]
패키지는 설치 과정과 실행 중에 코드를 수행할 수 있으므로 출처를 확인하세요. 이름이 비슷한 가짜 패키지를 피하도록 공식 프로젝트의 정확한 이름과 저장소 주소를 대조합니다. 관리자 권한이나 sudo로 pip를 실행하지 말고 프로젝트 가상환경을 사용합니다. 의존성 파일을 코드 리뷰하고, 해시 검증과 신뢰할 수 있는 인덱스를 사용하며, 자동 점검 결과를 보고 업데이트합니다. 토큰이 포함된 저장소 URL이나 설정 파일은 커밋·로그에 남기지 않습니다.
[직접 해볼 과제]
종이에 app→web-lib→url-lib 형태의 의존성 그래프를 그리세요. app은 web-lib>=2,<3을 요구하고 다른 도구는 web-lib<2를 요구한다고 적은 뒤, 왜 한 환경에서 동시에 만족할 수 없는지 설명하세요. 이어 방금 만든 환경의 pip 버전과 pip check 결과를 기록합니다.
[확인문제]
1. 직접 의존성과 간접 의존성은 어떻게 다른가요?
2. 프로젝트마다 가상환경을 나누는 이유는 무엇인가요?
3. `python -m pip`를 사용하는 장점은 무엇인가요?
[다음 학습]
다음 글은 PY-003 리스트·튜플·딕셔너리·집합입니다. TOOL 트랙에서는 TOOL-004 Git 저장소·커밋·변경 이력으로 이어집니다.
[공식 참고 자료]
Python Packaging User Guide 설치 안내
https://packaging.python.org/en/latest/tutorials/installing-packages/
pip 사용자 가이드
https://pip.pypa.io/en/stable/user_guide/
Python 의존성 지정 규격
https://packaging.python.org/en/latest/specifications/dependency-specifiers/
pip 재현 가능한 설치
https://pip.pypa.io/en/stable/topics/repeatable-installs/
pip 안전한 설치
https://pip.pypa.io/en/stable/topics/secure-installs/
Python venv 문서
https://docs.python.org/3/library/venv.html
패키지 관리자가 무엇을 설치하고 의존성을 어떻게 해결하는지 배웁니다. 외부 패키지를 내려받지 않고 프로젝트 전용 Python 환경에서 pip의 버전·설치 목록·충돌 상태를 확인합니다.
[선수지식]
TOOL-001의 개발환경과 TOOL-002의 터미널·명령어를 읽고 Python 3를 준비하세요.
[학습목표]
1. 패키지 관리자와 패키지 저장소의 역할을 설명한다.
2. 직접 의존성과 간접 의존성을 구분한다.
3. 격리 환경에서 설치 상태와 의존성 충돌을 점검한다.
[핵심개념]
패키지는 설치할 수 있게 코드와 메타데이터를 묶은 배포 단위입니다. 패키지 관리자는 저장소에서 후보를 찾고, 버전 조건과 운영체제·Python 버전 호환성을 확인해 설치·업데이트·제거를 돕습니다.
의존성은 내 프로그램이 동작하기 위해 필요한 다른 패키지입니다. 프로젝트가 A를 직접 사용하면 A는 직접 의존성입니다. A가 다시 B를 요구한다면 B는 간접 또는 전이 의존성입니다.
버전 조건은 이름 뒤에 붙는 규칙입니다. Python 패키징 규격에서 SomeProject==1.4는 한 버전, SomeProject>=1,<2는 범위를 뜻합니다. 범위가 너무 넓으면 미래 변경으로 결과가 달라질 수 있고, 무조건 한 버전에 고정하면 보안 수정 반영이 늦어질 수 있습니다. 애플리케이션은 검증된 전체 의존성 집합을 잠금 파일이나 고정된 요구사항으로 기록하고, 업데이트를 자동 테스트한 뒤 반영해야 합니다.
가상환경은 프로젝트별 Python 실행 파일과 패키지 설치 위치를 분리합니다. `python -m pip` 형태는 지금 선택한 Python의 pip를 실행한다는 뜻이므로, 다른 Python에 실수로 설치하는 일을 줄입니다.
[따라하기]
빈 package-lab 폴더를 만들어 이동한 뒤 실행하세요. 이 실습은 네트워크에 접속하거나 외부 패키지를 설치하지 않습니다.
Windows PowerShell:
mkdir package-lab
cd package-lab
py -m venv .venv
.venv\Scripts\python -m pip --version
.venv\Scripts\python -m pip list
.venv\Scripts\python -m pip check
macOS·Linux:
mkdir package-lab
cd package-lab
python3 -m venv .venv
.venv/bin/python -m pip --version
.venv/bin/python -m pip list
.venv/bin/python -m pip check
첫 명령은 격리 환경을 만듭니다. --version 결과에는 pip 버전과 .venv 안의 경로가 표시됩니다. pip list에는 최소한 pip가 보이며 Python 버전에 따라 다른 기본 항목이 있을 수 있습니다. 새 환경이 정상이라면 pip check는 보통 다음과 같이 출력합니다.
No broken requirements found.
정확한 pip 버전과 경로는 컴퓨터마다 다릅니다. 작업을 마치면 package-lab 폴더를 파일 탐색기나 Finder에서 삭제할 수 있습니다. 이 폴더 밖의 Python 설치는 바뀌지 않았습니다.
[흔한 실수]
첫째, 어떤 Python을 가리키는지 확인하지 않고 pip만 실행합니다. 둘째, 전역 환경에 모든 프로젝트 패키지를 섞습니다. 셋째, 직접 의존성만 보고 간접 의존성을 무시합니다. 넷째, 버전 범위를 기록하지 않아 다른 날 다른 조합이 설치됩니다. 다섯째, 잠금 파일만 믿고 업데이트·테스트·취약점 점검을 하지 않습니다. 여섯째, 운영체제 패키지 관리자와 언어 패키지 관리자의 파일을 서로 덮어씁니다.
[보안 주의]
패키지는 설치 과정과 실행 중에 코드를 수행할 수 있으므로 출처를 확인하세요. 이름이 비슷한 가짜 패키지를 피하도록 공식 프로젝트의 정확한 이름과 저장소 주소를 대조합니다. 관리자 권한이나 sudo로 pip를 실행하지 말고 프로젝트 가상환경을 사용합니다. 의존성 파일을 코드 리뷰하고, 해시 검증과 신뢰할 수 있는 인덱스를 사용하며, 자동 점검 결과를 보고 업데이트합니다. 토큰이 포함된 저장소 URL이나 설정 파일은 커밋·로그에 남기지 않습니다.
[직접 해볼 과제]
종이에 app→web-lib→url-lib 형태의 의존성 그래프를 그리세요. app은 web-lib>=2,<3을 요구하고 다른 도구는 web-lib<2를 요구한다고 적은 뒤, 왜 한 환경에서 동시에 만족할 수 없는지 설명하세요. 이어 방금 만든 환경의 pip 버전과 pip check 결과를 기록합니다.
[확인문제]
1. 직접 의존성과 간접 의존성은 어떻게 다른가요?
2. 프로젝트마다 가상환경을 나누는 이유는 무엇인가요?
3. `python -m pip`를 사용하는 장점은 무엇인가요?
[다음 학습]
다음 글은 PY-003 리스트·튜플·딕셔너리·집합입니다. TOOL 트랙에서는 TOOL-004 Git 저장소·커밋·변경 이력으로 이어집니다.
[공식 참고 자료]
Python Packaging User Guide 설치 안내
https://packaging.python.org/en/latest/tutorials/installing-packages/
pip 사용자 가이드
https://pip.pypa.io/en/stable/user_guide/
Python 의존성 지정 규격
https://packaging.python.org/en/latest/specifications/dependency-specifiers/
pip 재현 가능한 설치
https://pip.pypa.io/en/stable/topics/repeatable-installs/
pip 안전한 설치
https://pip.pypa.io/en/stable/topics/secure-installs/
Python venv 문서
https://docs.python.org/3/library/venv.html
- 이전글[PY-003][입문] 리스트·튜플·딕셔너리·집합 구분하기 26.08.30
- 다음글[CS-003][입문] 함수의 입력과 출력 이해하기 26.08.30
댓글목록
등록된 댓글이 없습니다.
