Summary
python 가상환경을 생성하고 pip 패키지를 관리하는 Pipenv에 대한 글입니다.
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
위 그림은 mac에서 pipenv를 설치한 모습입니다. 설치가 완료되었다면 본격적으로 가상환경을 사용할 수 있습니다.
pipenv 사용방법
가상환경 생성
- –python으로 python version을 명시해거나, –three로 python3를 자동으로 생성 시킬 수 있습니다.
- shell을 이용해서 activate(활성화) 시켜줍니다.
# 가상환경 생성
$ pipenv --python 3.9
$ pipenv --three
# 가상환경 실행
$ pipenv shell
※ 주의
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
- 운영환경에 설치
운영환경에 패키지로 설치시 [packages]에만 Adding이 된 것을 확인할 수 있습니다.
- 개발환경에 설치
개발환경에 패키지로 설치시 [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 내용 확인
저희는 위에서 운영 환경과 개발 환경을 나눠서 모듈을 설치했습니다.
Pipfile 내용을 확인하니 [packages]와 [dev-packages]에 각각 모듈이 잘 반영된 모습을 확인할 수 있네요.
- 그래프 확인
–graph를 사용해서 각 모듈의 의존성을 확인할 수 있습니다.
예를 들어 pytest 모듈은 attrs가 19.2.0 version 이상이 필요하다고 명시되어 있습니다.
pipenv는 이러한 의존성이 깨지지 않도록 자동으로 검사해줍니다.
Reference
[1] pipenv 소개