-
`pipenv`는 정말 좋다.Programming Language/Python3 2021. 10. 25. 18:49
이거 정말 좋아. 아주 좋아.
Install
일단 설치부터 하고 시작하자. 어쨌든 당신은
pipenv
를 쓰게 될 것이다.이 글에서는 미안하지만
mac
기반 컴퓨터에 대해서만 다룰 것 이다. 🙇🏻♂️brew
가 설치되어 있다는 가정하에 설치한다.# 무려 fomulae ! brew install pipenv
Pipenv ?
pip
를 대신하는 패키지관리자라고 보면 될 것 같다. 좀 더 많은 기능을 제공하는 관리자이다.
사용법은pip
와 매우 흡사하다. 간단한 세팅을 통해 사용법을 익히면 좋을 것 같다.
빈 디렉토리를 생성하고 아래의 커맨드를 따라가보자.(이 빈 디렉토리를
pipenv-prac
이라고 부르겠다. 같은 이름의 디렉토리를 생성하는 것은 아래의 설명을 따라가기에 더 편할 것 이다.)# use installed python version $ pipenv --python 3.8 # same as source ./venv/bin/activate $ pipenv shell # check Pipfile. $ ls -al (pipenv-prac) (base) ➜ pipenv-prac l total 8 drwxr-xr-x 3 user_name staff 96B Jun 5 16:04 . drwxr-xr-x 4 user_name staff 128B Jun 5 16:04 .. -rw-r--r-- 1 user_name staff 138B Jun 5 16:04 Pipfile # assign version is optional $ pipenv install requests $ pipenv install black --dev --pre $ pipenv install pytest --dev
black
은 설치할 때--pre
를 붙여주어야 한다. 해당 이슈 그렇지 않으면 설치할 때 오류가 발생한다. 오류가 발생하면 해결하기 꽤나 까다로웠다.
나의 경우Pipfile.lock
을 지우고pipenv lock
으로 새로 만들었다.하나의 문제가 더 있다. 3.7버전의 python을 사용하는 경우
pipenv install black --pre --dev
도 안될 수 있다. 왜 그러는진... 잘모르겠다.위의 커맨드를 입력한 이후
Pipfile
을 확인해보자.[[source]] url = "https://pypi.org/simple" verify_ssl = true name = "pypi" [packages] requests = "*" [dev-packages] black = "*" pytest = "*" [requires] python_version = "3.8" [pipenv] allow_prereleases = true
이 파일에서
pipenv
의 장점을 느낄 수 있을 것이다.
그렇다.pipenv
는 명시적으로 python 버전을 표기해준다. 그리고 NodeJS의pacakges.json
과 같이 개발버전과 배포버전의 의존성을 다르게 관리할 수 있다.
나의 경우pipenv
를 사용하게 된 계기는black
때문이었다.AWS Lambda를 이용하는데, 의존성을 layer에 올렸을 때
black
이 함께 포함되는 것이다. 용량면에서 그렇게 큰 차이는 아니겠지만 굳이 같이 올릴 필요가 없다는 생각이 들어서 찾아보니 아주 좋은 도구가 있었다.하지만 결론은 같은 가상환경을 사용하고, 저장되는 위치는 같아서... 구별할 수 없었다.
그래서Dockerfile
을 만들 때 사용하는requirements.txt
를 생성할 때만 유용하게 쓸 것 같다.지원하는 기능
- requirements.txt 생성
pipenv lock -r > requirements.txt
아마 많은 분들이
requirements.txt
로 파이썬 버전을 관리하지 않을까.pipenv
는 편리하게 export하도록 돕는다.만들어진
requirements.txt
의 내용 안에는 dev package는 제외되어 있다. (이 기능이 참 좋다.)- 가상환경 관리
pipenv
는 가상환경의 이름을 shell이 만들어진 디렉토리(예시의 경우pipenv-prac
)의 위치를 기반으로 해시값을 만든다. 만들어진 디렉토리의 이름은 아래와 같다.# similar as rm -rf ~/.local/share/virtualenvs/pipenv-prac-4h9ymY65 pipenv --rm
단점
pipenv
는 아직 공식 관리자가 아니다.그렇기 때문에 사용하면서 오류가 발생할 수 있다는 점은 인지해야 한다. (사실 에러는 다 발생한다.)
References
- 가장 보통의 파이썬 개발 환경 (Pyenv + Pipenv + Black + Flit)
- Official page Pipenv: Python Dev Workflow for Humans
- Official repositary on github
- Pipenv & Virtual Environments
- How to fix locking failed in pipenv?
- GProst said "Try to remove
Pipefile.lock
before installing a package" totally work properly
- GProst said "Try to remove
Related Issues
- Generate requirements.txt from Pipfile.lock
- Allow creating requirements.txt files without dev-packages
- Advanced Usage of Pipenv
- You can check manage
pipenv
install source url. I think most of cases does not needed.
- You can check manage
'Programming Language > Python3' 카테고리의 다른 글
Python3 with catch (0) 2021.10.25 "private" in python (0) 2021.10.25 파이썬 내부 클래스에 대해 (0) 2021.10.25 Pytest에 대해 알아보자. (0) 2021.10.25 [번역] Pytest fixture (0) 2021.10.25