Venv vs Pipenv vs Poetry

Tony Lee·2023년 4월 18일
4

knowledge

목록 보기
2/16

서론

로컬 환경으로 개발을 하다보면, dependency 충돌이 일어나거나 "내 컴퓨터에서는 되는데 왜 안되지?"
하는 경우가 자주 발생한다.
이런 사태를 미리 방지할 수 있는 방법으로 파이썬을 다루는 개발자는 대부분 위 셋 중 하나를 선택한다.

필자도 개발 환경에 대해서 지식이 많은 편이 아니라 깊게 설명은 못하지만, 파이썬에 입문하는 사람에게 도움이 되었으면 한다.

Terms

  • Package managment tool:
    3rd-party 라이브러리를 간편하게 설치, 제거, 업데이트 하는 기능을 가진다.
    패키지 매니저가 없다면, 아마 깃헙이나 cURL을 이용해서 모든 패키지를 설치해야 할 것이다.

A package manager or package-management system is a collection of software tools that automates the process of installing, upgrading, configuring, and removing computer programs for a computer in a consistent manner. - Wikipedia

  • Virtual environment:
    말 그대로 가상 환경이다.
    한 컴퓨터 안에 여러 개의 가상 환경을 만들 수 있고, 가상 환경마다 다른 패키지를 설치할 수 있다.
    예를들어 프로젝트 A에는 python3.7, B에는 python3.11을 따로 실행 시킬 수 있다.

Venv

Virtual environment 의 줄임말

Venv는 필자가 지금까지 써왔던 환경이다. 사용시 가장 쉬웠고 편했다.
그렇지만 단점도 있다고 한다 (아직까지 단점을 마주한 적이 없기 때문에 "있다고 한다"로 표현)

단점

  • Pipenv, Poetry에 비해 부족한 기능
  • pip 을 이용한 설치
  • 디렉토리에 따라 activate, deactivate을 불편함

설치

$ python3 -m pip install --user virtualenv

이제 로컬 컴퓨터에 venv가 설치되었다.

$ python3 -m venv your_dir

현재 커맨드 라인 안에 있는 디렉토리에서 your_dir라는 폴더가 생성되고, 그 안에 가상환경이 구축된다.

$ source your_dir/bin/activate

위 커맨드와 함께 터미널 앞에 (venv)같은 괄호가 생길 것이다. 그렇다면 정상적으로 작동된것이다.
필자는 가상환경 디렉토리 자체를 venv로 하는 것을 추천한다.

$ pip3 install XXX

이제 XXX에 원하는 라이브러리를 넣으면 되고, 위 환경이 activate되었을때만 라이브러리를 사용할 수 있다.

예를 들어 pip3 install scikit-learn을 가상환경 안에서 했다면,
로컬 환경에서는 scikit-learn을 불러올 수 없다.

매우 간단하다.

주의사항

깃헙에 올릴 목적이라면 .gitignore 파일에 환경 디렉토리를 넣어주자. 안그러면 설치한 라이브러리를 모두 깃헙에 올리게 되는 대참사가 발생... (여러번 경험해봤다...)

Pipenv

Pip와 Venv를 합쳐놨다고 생각하면 편하다.

써본적은 없지만, 파이썬을 사용하는 유저의 대부분이 Venv 또는 pipenv를 사용함으로, 디버깅 검색도 나름 편하고, requirements.txt를 만들 필요가 사라진다.
pipenv를 사용하면 Pipfile.lock에 모든 라이브러리 정보가 저장됨으로 패키지 매니징에 편하다.

Python Packaging Authority(PyPA)에서 추천하는 방법이다.

단점

  • 설치가 느린편이다. (그러나 느려봤자 딱히 체감은 없다)
  • 업데이트가 느리다. (이것도 상관없다고 생각한다)

설치

$ pip3 install pipenv

$ pipenv shell

현재 디렉토리에서 가상환경이 생성된다.

$ pipenv install XXX

가상환경에 라이브러리를 설치한다.
설명이 필요 없다. 굉장히 심플하다.

프로젝트가 완성되었다고 판단되거나 라이브러리 설치가 끝난 후

$ pipenv lock

커맨드를 사용해, Pipfile.lock을 만들 수 있다.

자세한 기능은 문헌을 참고하면 좋다. 시작 단계의 독자를 생각한 글임으로 dev, build 환경관련 내용은 생략.

Poetry

일단 이름이 마음에 든다. 시...

필자가 다음 프로젝트를 위해 사용하려는 방법이다.
Docs를 읽어보면, pipenv와 큰 차이는 없다.
다른점이라면, Pipfile.lock 대신 pyproject.toml파일로 대체한다.
그러나 poetry.lock파일도 있는데, lock 파일은 ultimate source of truth로 간주한다.

단점

  • 대부분의 유저가 $PATH에 poetry를 넣어야 하는데, 코린이로써는 당황스러울 것이다.
    이 글에서는 최대한 간단하게 설명!
  • 위 두 방법보단, 최근에 나온 방법임으로, 커뮤니티가 적고, dependancy solver 관련 버그가 있다고 한다.

설치

$ curl -sSL https://install.python-poetry.org | python3 -

위 커맨드를 터미널에 입력하면, 알아서 설치는 된다.
하지만 설치 완료 후, 아래 커맨드를 입력하면

$ poetry --version

에러가 뜰 것이다.
??

현재 컴퓨터에서 커맨드를 인식하지 못한다. 이유는 $PATH에 없기 때문인데, 추가하는 부분은 간단하고, 여기저기 쓸 곳이 많기 때문에 여기까지 읽었다면, 코린이라도 해보는 것을 추천한다.

$ open ~/.zprofile

터미널에 입력하면 이상한 파일이 뜰 것이다. 만약 없다고 나온다면, 맥 기준 가장 상위 디렉토리로 가서 아래 커맨드를 입려하고 다시 오픈하면 된다.

$ touch .zprofile

그리고 $PATH를 추가하면 된다.

export PATH="/Users/YOUR_USERNAME/.local/bin:$PATH"

이렇게 해도 안된다면, 같은 방법으로

$ open ~/.zshrc

$PATH를 추가해보자.

여기서 YOUR_USERNAME은 사용자에 따라 다름으로, 아예 따라하면 추가되지 않으니 유의!
그리고 나서 다시 poetry --version 을 입력하면 인식 할 것이다.

설치는 끝났는데 그럼 라이브러리는 어떻게 설치하나??

$ poetry init

그러면 toml파일을 만들어주고 이것저것 물어볼 것이다.
특별한건 없음으로, 다 엔터치면 된다.

필자는 마지막 두 질문, interactively? 에서 no를 했다

뭘 하려는지 몰라서 그랬다.

라이브러리 설치는

$ poetry add XXX

이제 라이브러리 설치도 끝났다. 그리고 toml파일을 열어보면 라이브러리 정보가 나와서 재밌을 것이다.


이런식으로 나온다.

이후 기능은 아직 사용해보지 않았다.

tldr

근본: venv
쉽게: pipenv
새로운: poetry

venv가 근본이라고 하기엔 반대도 많을 것 같지만, 파이썬을 입문하면 대부분 venv에서 시작하기에 이렇게 적었다.

긴 글 읽어주셔서 감사합니다.

profile
Striving to have a positive impact on the community

0개의 댓글