
Package 관리자에 대해 소개하기 전에, 우선 Package가 무엇인지에 대한 개념부터 짚고 넘어가도록 하겠습니다.
파이썬 패키지란 하나 이상의 모듈을 포함하고, 잘 정의된 구조로 구성된 디렉토리를 의미합니다.
이 디렉토리 안에는 __init__.py 파일이 포함되어 있어야 하며, 이는 해당 디렉토리가 패키지로 처리됨을 파이썬에 알리는 역할을 합니다.
패키지는 기본적으로 아래의 구조를 갖습니다.
my_package/
│
├── __init__.py # 패키지 초기화 파일
├── module1.py # 첫 번째 모듈
├── module2.py # 두 번째 모듈
└── subpackage/ # 서브 패키지
├── __init__.py
└── module3.py
재사용성 : 패키지를 통해 기능을 모듈 별로 나누어 코드 재사용성을 높일 수 있습니다.
네임스페이스 관리 : 모듈 이름 충돌을 방지하려 여러 모듈이 같은 이름의 함수나 변수를 가질 수 있게 합니다.
유지 보수성 : 코드를 잘 구조화하면 뉴지보수가 용이해집니다. 오류 수정, 업데이트 및 개선이 간편해집니다.
패키지는 일반적으로 PyPI(Python Package Index)와 같은 패키지 인덱스를 통해 배포됩니다. setuptools 및 wheel과 같은 도구를 사용하여 패키지를 생성하고, twine을 통해 PyPI에 업로드할 수 있습니다.
Python의 package 관리자는 다양한 도구를 통해 개발자들이 소프트웨어 패키지를 효과적으로 설치, 관리 및 배포할 수 있도록 돕는 역할을 합니다.
지금부터 가장 대표적인 3가지의 관리자에 대해 설명드리겠습니다.
pip는 Python Packaging Authority에 의해 관리되는 파이썬의 공식 패키지 인스톨러입니다.
주로 Python Package Index (PyPI)에서 패키지를 다운로드하며, 패키지 설치, 업그레이드 및 제거를 간단한 명령어로 수행할 수 있습니다.
다운받고자하는 패키지를 PyPI 사이트에 검색하면, 해당 패키지에 대한 설명과 함께, 설치 명령어가 나옵니다.

| 명령어 | 기능 |
|---|---|
pip install package_name | 패키지 설치 |
pip uninstall package_name | 패키지 제거 |
pip freeze | 설치된 패키지 목록과 버전 출력 |
pip show package_name | 특정 패키지에 대한 정보 제공 |
conda는 Anaconda Inc.에 의해 개발된 크로스 플랫폼 패키지 및 환경 관리자입니다.
데이터 과학과 기계 학습 프로젝트에 널리 사용되며, 파이썬 패키지뿐 아니라 R, Scala 등 다른 언어의 패키지도 관리합니다.
conda의 더 자세한 설명은 CONDA에서 확인할 수 있습니다.
| 명령어 | 기능 |
|---|---|
| conda create --name env_name | 새 환경을 생성 |
| conda install package_name | 환경에 패키지를 설치 |
| conda list | 환경 내 설치된 패키지 목록을 보여줌 |
| conda update package_name | 패키지를 업데이트 |
| conda env list | 생성된 모든 환경을 보여줌 |
| conda remove package_name | 특정 패키지 제거 |
pipenv는 개발 환경을 쉽게 관리할 수 있도록 도와주는 도구로, pip와 venv의 기능을 통합한 것입니다.
Pipfile과 Pipfile.lock을 사용하여 프로젝트의 의존성을 명확하고 안정적으로 관리합니다.
| 명령어 | 기능 |
|---|---|
| pipenv install package_name | Pipfile에 정의된 패키지를 설치 |
| pipenv shell | 가상 환경에 진입 |
| pipenv uninstall package_name | 패키지를 제거 |
| pipenv graph | 설치된 패키지의 의존성 트리를 보여줌 |
| pipenv --rm | 가상 환경 제거 |
| pipenv lock | Pipfile.lock을 생성하여 의존성을 잠금 |
pip은 단순한 패키지 설치가 필요할 때 효과적입니다.
conda는 복잡한 데이터 과학 프로젝트와 다양한 언어의 패키지를 다룰 때 적합합니다.
pipenv는 개발 프로젝트의 의존성을 명확히 관리하고자 할 때 추천됩니다.