PIPENV

On a regular basis·2021년 11월 6일
0

pipenv

항상 가상환경은 conda만 써왔었는데, 새롭게 알게된 pipenv! 블로깅을 해보장 🌈

🔍 python을 사용하면서 당연하게도 사용하게 되는 두가지.

  • 첫번째는 pip이다. python을 이용하며 사용하게 되는 패키지 관리 툴이다. 프로그램을 만들 때, 의도하지 않는 이상, 다양한 패키지를 사용하게 된다. 이때 pip를 활용하여 여러가지 패키지들을 설치할 수 있다.
  • 두번째는 virtualenv이다. python으로 개발을 하게 되면 거의 항상 복수의 패키지를 설치하여 사용하게 된다. 하지만 각각의 프로젝트가 요구하는 패키지들의 상세 내용이 다를 수 있다.

A라는 프로젝트는 특정 패키지의 1.0 버전을 사용하고 있었지만, B라는 프로젝트는 특정 패키지의 2.0버전을 사용하는 경우가 발생한다. 그렇기 때문에 각각의 프로젝트 내 개발 환경을 구축하는 것이 제일 이상적이다. 이를 지원하는 것이 virtualenv이다. virtualenv는 프로젝트별로 고립된 개발환경을 구축하게 해주기 때문에 A 프로젝트와 B 프로젝트를 따로 의식하면서 패키지를 특정 환경에 맞게 설치했다 지웠다 하지 않으며 개발할 수 있게 된다.

하지만 여기서 문제가 발생!!. 첫번째는 pip는 패키지들을 설치하는데 쫌 귀찮음. pip를 하나씩 설치를 하자니 시간이 많이 든당. 그래서 requirements.txt라는 파일을 통해 통으로 패키지들을 관리할 수 있도록 지원하고 있다. 하지만 문제는 requirements.txt를 버전을 명시하지 않고 작성하였을때, 오늘과 내일의 설치가 똑같다는 보장이 없으며 정확히 버전을 모두 기재를 하자니 또한 귀찮아진다. 결론은 pip도 virtualenv도 매번 환경 설정을 의식해야 하는것들이 많기 때문에 여러모로 귀찮아...🙈

pipenv의 등장

이런 이유들로 인해 등장한 것이 pipenv!! 🥳
pip와 virtualenv가 합쳐진 것! 🥳

  1. pipenv는 Python.org에서 공식적으로 권장하는 패키지 설치 툴.
  2. Pipenv는 파이썬으로 들어가는 세계 속 패키징 설치 경험을 최상으로 제공하고자 노력^^.
  3. pipenv는 또한 아래와 같이 문제들을 해결하려고 한다고한다고한다!
  • pip와 virtualenv를 따로 쓸 필요가 없다. 동시에 사용이 된다.
  • Pipenv는 Pipfile와 Pipfile.lock을 requirements.txt를 대신하여 사용한다.
  • 해쉬가 자동생성된다. (보안)
  • 의존성 그래프를 제공함으로서 insight를 제공한다 (e.g. $ pipenv graph).
  • .env 파일들을 사용한 스트림라인 개발 워크플로우.
$ brew install pipenv

$ pipenv shell
# pipenv 가상환경 활성화

$ pipenv update 
# Pipfile.lock 빌드

$ pipenv install --system 
# 의존성 패키지 설치 !
# Pipfile.lock 생성됐는지 확인!

필요한 패키지들을 다 깔고 실제로 pipfile에 들어가보면 요렇게-

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
asgiref = "==3.4.1"
bcrypt = "==3.2.0"
certifi = "==2021.10.8"
cffi = "==1.15.0"
cryptography = "==35.0.0"
django-cors-headers = "==3.10.0"
pycparser = "==2.20"
pytz = "==2021.3"
six = "==1.16.0"
sqlparse = "==0.4.2"
Django = "==3.2.8"
PyJWT = "==2.3.0"

[dev-packages]

[requires]
python_version = "3.9"

많은 것들이 다- 깔려있다.

  • venv나 virtualenv을 사용하는 것과 마찬가지 방식으로 터미널에서 가상 환경을 활성화할 수 있음!
  • pipenv shell 커맨드를 날리면, 쉘 프로프트 앞에 (프로젝트 폴더명)이 붙으면서 가상 환경이 활성화.
  • which 커맨드를 통해 어떤 파이썬 인터프리터가 사용되는지 확인보면 가상 환경의 파이썬이 사용되고 있음을 알 수 있음.
  • 가상 환경을 비활성화하려면 exit 명령어만 날려주면 됨!
$ pipenv shell
Launching subshell in virtual environment…
 . /Users/dale/.local/share/virtualenvs/learn-python-XBV2stdv/bin/activate
(learn-python) $ which python
/Users/dale/.local/share/virtualenvs/learn-python-XBV2stdv/bin/python

EX) requests라는 패키지를 설치.

$ pipenv install requests
Installing requests…
Adding requests to Pipfile's [packages]…
✔ Installation Succeeded
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✔ Success!
Updated Pipfile.lock (444a6d)!
Installing dependencies from Pipfile.lock (444a6d)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 5/5 — 00:00:00
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
  • 패키지가 설치가 완료되면 Pipfile 파일의 [packages] 항목에 설치된 패키지가 나옴.

  • pipfile

[packages]
requests = "*"

📌 Pipfile.lock 파일도 함께 생성이 되는데!
pipfile.lock은 pipenv가 설치된 패키지의 버전과 그 패키지가 의존하는 다른 패키지들의 정확한 버전을 기억하기 위해서 자체적으로 사용하는 파일. 따라서 우리가 직접 수정할 일은 없으며, 수정해서도 안됨. 이렇게 pipenv는 Pipfile.lock이라는 패키지 잠금 파일을 사용해서 Pipfile 파일에 정확한 버전이 명시되어 있지않더라도 항상 동일한 버전의 패키지를 설치할 수 있도록 해줌.... 고마왕...🥰

모든 패키지 한 번에 설치

pipenv는 협업 프로젝트에서 여러 개발자들이 함께 일할 때 더 죠음. 이번 프리온보딩때도 pipenv로 했는데 짱 편했다. 왜냐면, Pipfile 파일과 Pipfile.lock 파일만 있으면 누구나 동일한 가상 환경을 구성하고 동일한 버전의 패키지를 설치할 수 있어서. 프로젝트 내 모든 개발자들은 Git 저장소에 올려둔 Pipfile 파일과 Pipfile.lock 파일은 내려받은 후에 pipenv install 커맨드 하나로 모든 패키지를 한 방에 설치할 수 있음!

자주 사용해야지! 익숙해지기! 🌈

profile
개발 기록

0개의 댓글