conda에서 pipenv로..

AIVILLAIN·2023년 1월 19일
0

pipenv

파이썬 프로젝트 패키징 도구

프로젝트에 대한 virtualenv 자동 생성 및 관리
패키지 설치/제거 시 Pipfile에 패키지 추가/제거
빌드 생성에 사용되는 Pipfile.lock 생성

애플리케이션 사용자와 개발자에게 작업 환경을 쉽게 설정할 수 있는 방법 제공

왜?

기존에 anaconda 기반의 파이썬 가상환경을 익숙하게 사용하였으나 업무, 프로젝트로 인해 가상환경을 구분할 때 걸리적거리는 부분이 있었다

  1. 겨우 파이썬 환경 주제에 용량이 너무 크다 → miniconda로 일부 해결
  2. conda install로 설치했을 때 생각했던 것과 다르게 오작동하는 형태로 설치되는 경험이 있었다 → 내가 이상하게 한걸수도?
  3. 새로운 프로젝트의 가상환경 생성 시 필요없는것들이 같이 설치된다

등등이 있던 것 같고 2번과 같은 문제 경험이 있어 항상 pip install로 설치하다 보니 굳이 conda를 써야하나? 라는 생각도 듬

그래서 다른 방법들을 찾아봤고 써보면 괜찮겠다 싶은게 있어 정리해놓는다

setup.py와의 비교

라이브러리와 애플리케이션

라이브러리

다른 라이브러리 및 애플리케이션에 재사용 가능한 기능 제공
하위 종속성을 가지며 다른 라이브러리와 함께 작업해야 함
서로 다른 라이브러리의 하위 종속성에서 버전 충돌 방지를 위해 종속성 버전을 고정하면 안됨
일부 기능에 의존하는 경우 버전의 상한 또는 하한을 지정할 수 있음

setup.py에서 라이브러리 종속성은 install_dependents로 지정됨

애플리케이션

궁극적으로 라이브러리는 일부 애플리케이션에서 사용되어야 함
애플리케이션은 다른 프로젝트에 의존하지 않음
특정 환경에서 배치되며 그 환경에서만 종속성이 구체화되어야 함
이를 더 쉽게 만드는 것이 pipenv의 주 목표

주된 차이

  • 라이브러리의 경우 setup.py에서는 설치할 버전과 종속성에 대해 사용자가 결정할 수 없음
  • 애플리케이션의 경우 Pipfile에서 종속성, 종속성을 가져올 위치를 정의하고 이를 사용하여 Pipfile.lock의 구체적인 종속성 집합을 업데이트
  • 라이브러리와 애플리케이션 구분이 명확하지 않은 프로젝트의 경우 pipenv, pipfile과 install_requires 함께 사용

장점

  • pip와 virtualenv를 별도로 사용하지 않아도 됨
  • 문제가 생길 수 있는 requirements.txt 대신 Pipfile, Pipfile.lock를 사용하여 마지막으로 테스트한 조합, 종속성 선언을 구분
  • 항상 해시로 보안됨
  • 최신 버전의 종속성을 사용하여 오래된 구성 요소에서 발생하는 보안 위험을 최소화
  • 종속성을 그래프로 표현
  • .env 파일을 로드하여 개발 워크플로우 간소화

설치

$ pip install --user pipenv

pip, python -m venv or virtualenv로 직접 호출하고 Makefile의 사용 대체

pipenv install, uninstall(pip처럼 사용), lock

사용 방법

  1. 파이썬 프로젝트 폴더로 이동/생성
  2. 가상 환경에서 사용할 파이썬 버전을 명시하여 pipenv 커맨드 실행
$ pipenv install --python 3.10

→ 해당 프로젝트에서 처음 실행 시 가상환경 생성, Pipfile, Pipfile.lock 생성

$ pipenv --venv # 가상 환경 위치 확인
$ pipenv --py # 가상 환경 내 파이썰 인터프리 위치 확인
$ pipenv run python # 파이썬 인터프리터 실행
$ pipenv shell # 가상 환경 활성화
$ exit # 가상환경 빠져나가기
$ pipenv --rm # 가상 환경 제거
$ pipenv install ** --dev # 개발용 패키지 설치 (dev dependency)
$ pipenv install # Pipfile, Pipfile.lock의 패키지 모두 설치
$ pipenv check # 보안 취약점이 있는 패키지 확인

Pipfile은 대략적인 설치 패키지
Pipfile.lock는 해당 패키지와 의존 패키지들의 정확한 버전 기록

패키지 설치 시

$ pipenv install 패키지명 # 으로 설치해야 Pipfile에 기록됨
$ pipenv lock # 패키지의 이름, 정확한 버전 기록
$ pipenv install # 협업하는 다른 사람은 해당 명령어로 새로운 가상환경 만들고 필요한 패키지 설치

개발 환경 관리

$ pipenv install --dev 패키지명 # 개발 환경에서만 사용되는 패키지 설치
$ pipenv install # --dev를 붙인 패키지는 이 명령어로 설치되지 않음
$ pipenv install --dev # 해당 옵션을 붙이면 개발 패키지를 포함한 모든 dependencies 설치

Reference

rootnroll: online playgrounds

Pipenv: Python Dev Workflow for Humans — pipenv 2023.2.5.dev0 documentation

profile
소신있는 오픈마인드

0개의 댓글