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는 개발 프로젝트의 의존성을 명확히 관리하고자 할 때 추천됩니다.