Summary

python 가상환경을 생성하고 pip 패키지를 관리하는 Pipenv에 대한 글입니다.


3-Figure1-1

C, C++을 사용하다가 처음으로 Python 언어를 접했을 때, 익숙하지 않았던 건 바로 다양한 packages였습니다. C언어에서는 “이것도 구현해야돼?”라고 생각했던 적이 종종 있었다면 Python에서는 “아니 이것도 구현되어 있다고?”라고 생각할 때가 많았습니다. 저희가 원하는 기능은 이미 Python에 라이브러리에 구현이 되어있습니다. 활용할 수 있는 패키지가 다양하기 때문에 타 언어에 비해서 매우 편리했습니다.

그래서 파이썬은 packages를 저장하는 허브가 존재합니다. 바로 PyPI (Python Package Index)라는 packages 저장소입니다. 다른 사람들이 Python으로 만든 packages를 업로드하면 우리는 Pypi에서 관리하고 열람할 수 있습니다. 즉, Pypi는 도서관 같은 역할을 한다고 보면 됩니다.

PyPI에 올라와있는 패키지는 pip를 통해 가져와서 사용할 수 있습니다. Pypi가 도서관이라면 pip는 사서라고 생각하시면 됩니다. node의 npm, yarn, 리눅스의 apt 같은 패키지 매니저입니다. pip는 python을 사용하면 자동으로 설치가 되기 때문에 쉽게 사용할 수 있습니다.

하지만 마구잡이로 패키지를 설치했다가 골치 아픈 일이 종종 발생합니다. 바로 여러개의 패키지가 서로 충돌이 나는 경우 입니다. 예를 들어 A라는 패키지를 설치해서 잘 사용했는데, B라는 패키지를 설치했더니 동작이 되지 않는 경우가 발생합니다. 이럴땐 패키지를 모두 지웠다 깔거나 해당 종속성을 제거하기 위해 디버깅을 해야합니다. (😥)

그래서 이번 포스트에서는 python packages를 효율적으로 관리하고 다양한 기능을 제공하는 pipenv에 대해서 다뤄보고자 합니다.

pipenv 설치방법

  • pip 설치 방법
pip install pipenv
  • mac os 설치 방법
brew install pipenv

image-20220716202406625

위 그림은 mac에서 pipenv를 설치한 모습입니다. 설치가 완료되었다면 본격적으로 가상환경을 사용할 수 있습니다.

pipenv 사용방법

가상환경 생성

  • –python으로 python version을 명시해거나, –three로 python3를 자동으로 생성 시킬 수 있습니다.
  • shell을 이용해서 activate(활성화) 시켜줍니다.
# 가상환경 생성
$ pipenv --python 3.9
$ pipenv --three

# 가상환경 실행
$ pipenv shell

image-20220716201840770

※ 주의

python version 문제

간혹 system에 해당 파이썬 버전이 설치되지 않았다는 오류가 뜰 수 있습니다.

그럴 때는 pyenv를 설치해주시면 됩니다.

# pyenv 설치
$ brew install pyenv

패키지 설치

  • 패키지 설치는 pipenv install로 사용합니다.
  • 각 패키지를 설치할 때는 version을 명시해주는 것이 좋습니다.
  • 운영 환경용 패키지 설치와 개발 환경용 패키지 설치가 있습니다.
  • 개발 환경에 패키지를 설치하려면 모듈 이름 앞/뒤에 –dev 혹은 -d를 붙여줍니다.
# 운영 환경에 pytorch 설치
$ pipenv install torch==1.12.0

# 개발 환경에 pytest 설치
$ pipenv install --dev pytest
  • 운영환경에 설치

image-20220716202639085

운영환경에 패키지로 설치시 [packages]에만 Adding이 된 것을 확인할 수 있습니다.

  • 개발환경에 설치

image-20220716202721157

개발환경에 패키지로 설치시 [dev-packages]에만 Adding이 된 것을 확인할 수 있습니다.

vscode interpreter에서 사용하기

해당 가상환경을 vscode에서 사용하기 위해서는 직접 path를 설정해야됩니다.

$ pipenv --py
>> interpreter path 출력

Show all commands( Cmd + Shift + P) -> select interpreter -> interpreter 경로입력 -> path 복/붙

패키지 확인

  • pipenv로 가상환경을 생성하면 Pipfile과 Pipfile.lock 파일이 생성됩니다.
  • pipfile는 패키지를 간략하게 보여주고, pipfile.lock : 패키지를 자세히 보여줍니다.
  • lock 파일에서 해쉬가 자동 생성되기 때문에 보안에 좋습니다.
# Pipfile 내용 확인
$ cat Pipfile

# 의존성 그래프 확인
$ pipenv --graph
  • Pipfile 내용 확인

image-20220716214150629

저희는 위에서 운영 환경과 개발 환경을 나눠서 모듈을 설치했습니다.

Pipfile 내용을 확인하니 [packages]와 [dev-packages]에 각각 모듈이 잘 반영된 모습을 확인할 수 있네요.

  • 그래프 확인

image-20220717105342083

–graph를 사용해서 각 모듈의 의존성을 확인할 수 있습니다.

예를 들어 pytest 모듈은 attrs가 19.2.0 version 이상이 필요하다고 명시되어 있습니다.

pipenv는 이러한 의존성이 깨지지 않도록 자동으로 검사해줍니다.

Reference

[1] pipenv 소개

[2] [Python] pipenv 란 무엇인가

[3] Pipenv & 가상 환경(Virtual Environments)