1. Poetry 설치
1.1 Poetry란?
Poetry는 pipvenv (pip + virtualenv)와 비슷하게, pip와 virtualenv를 동시에 사용할 수 있게 해주는 packaging과 dependency management를 위한 tool이다.
Poetry는 pip와 비교하면 쉽게 이해할 수 있다.(pip에 관하여 잘 모른다면, pip에 관한 설명은 아래 링크에서 확인하기 바란다.)
https://takeheed.tistory.com/13
PACKAGING
Poetry의 packaging 역할은 pip와 같이, package installing 및 managing이다. 즉, 원하는 package를 설치하고, 관리해주는 것이다.
Build, Publish도 간단히 할 수 있다.
poetry build # easy build & package projects
poetry publish # publishing to PyPI
DEPENDENCY RESOLVER
packaging 역할은 pip로도 가능한데, 왜 pip를 사용하지 않을까?
프로젝트에서 사용하는 package A에서 요구하는 package a가 2.0 버전이라고 하자. package a를 설치한 상황에서 package A를 (이미 package a가 1.0 버전으로 설치되어 있는데 2.0 버전으로 설치할 수 있다는 것... 즉 dependency resolving에 실패한 것...)
pip는 lock 파일이 존재하지 않고, 사용자가 직접 pip freeze 명령어나 requirements.txt (pip install -r requirements.txt)를 만들어야 했는데, Poetry는 lock파일과 pyproject.toml를 제공하여 setup.py, requirements.txt, setup.cfg, MAIFEST.in, Pipfile를 대신한다. Poetry는 버전을 확인하고, 특정 버전 이상이 아닌 경우 설치가 불가하도록 dependency 충돌을 방지해준다.
ISOLATION : Virtual Environmnet
pip는 전역에 (globally) package를 설치하는데, 이때 서로 다른 버전의 프로젝트마다 충돌이 일어날 수 있다. 예시로, 프로젝트 A에는 1.0 버전의 패키지 a를 사용하는데, 프로젝트 B에서는 2.0 버전의 패키지 a를 사용할 때 충돌이 일어날 수 있다.
이처럼 서로 다른 종류와 버전의 패키지를 사용할 수 있도록 '독립된 작업 공간', 즉 가상 환경을 Poetry가 만들어준다. 구성된 virtualenv를 사용하거나 시스템에서 분리되어 있는 자체 가상 환경을 만들어 줄 수 있다.
1.2 Poetry 설치
1) pipx 설치
official installer로 Poetry를 설치하는 방법도 있었지만, 필자는 pipx로 Poetry를 설치했다. 위에서 pip는 전역으로 패키지를 설치하기 때문에 (pip is a general-purpose package installer for both libraries and apps with no environment isolation), dependency 충돌이 일어난다고 했는데, pipx는 그 문제점을 해결한 package manager이다.
pipx — Install and Run Python Applications in Isolated Environments
# macOS
brew install pipx
pipx ensurepath
# Linux, install via pip (requires pip 19.0 or later)
python3 -m pip install --user pipx
python3 -m pipx ensurepath
# Windows, install via pip (requires pip 19.0 or later)
## If you installed python using the app-store, replace `python` with `python3` in the next line.
python -m pip install --user pipx
#Set up your path environmental variables
%USERPROFILE%\.local\bin
%USERPROFILE%\AppData\Roaming\Python\Python38\Scripts
pipx ensurepath
2) pipx로 Poetry 설치
# Install Poetry
pipx install poetry
# Update Poetry
pipx upgrade poetry
# Uninstall Poetry
pipx uninstall poetry
# Check Version
Use Poetry
1.3 Poetry Usage
1) 새로운 프로젝트 생성
poetry new <PROJECT-NAME>
2) 프로젝트 구조
3) pyproject.toml
pyproject.toml은 dependency를 관리하는 파일이다. 해당 파일에서 [tool.poetry.dependencies] 아래에 직접 dependecy를 추가할 수 있다. 하지만, 더 편리하게 자동으로 poetry add를 통해 자동으로 dependecy를 추가할 수 있다.
# Install package
$ poetry add <PACKAGE-NAME>
# Uninsatll package
poetry remove <PACKAGE-NAME>
# Show Details of package
poetry show <PACKAGE-NAME>
# See all packages & dependencies
poetry show --tree
# Latest Updates for packages
poetry show --latest
# Export dependencies in requirements.txt
poetry export -f requirements.txt --output requirements.txt
poetry add fastapi 한 후에 poetry.lock 파일이 생성된 것을 확인할 수 있다. package 설치하면, 설치한 패키지와 버전을 poetry.lock에 기록한 후, 해당 프로젝트를 lock 한다. 모든 사용자들이 완전히 동일한 version of dependency로 lock 되어 있는 프로젝트를 사용할 수 있다. 협업할 때, 해당 프로젝트에서 모든 사용자가 동일한 dependency를 사용할 수 있기 때문에 충돌이 줄어들 것이다.
2. Poetry Kernel
2.1 Poetry Kernel이란?
Poetry Kernel를 사용하면 Python virtual environment마다 별도의 Jupyter kernel를 설치할 필요가 없다. Poetry 환경을 통해 Jupyter kernel를 실행한다.
2.1 Poetry Kernel 설치
VSCode에서 poetry virtualenvs 보이지 않을때
Jupyter : Select Interpreter to Start Jupyter Server 하는데, poetry virtual envs 가 보이지 않을 때,
# virtual env (커널) path 확인
poetry env info --path
먼저, virtual env 경로를 확인한 후,
Ctrl + Shift + P 한 뒤
Python: Select Interpreter -> 해당 virtual env를 '+인터프리터 경로 입력'에서 추가해주면 된다.
visual studio code - VSCode doesn't show poetry virtualenvs - Stack Overflow
Reference
https://spoqa.github.io/2019/08/09/brand-new-python-dependency-manager-poetry.html
https://chacha95.github.io/2021-03-27-python7/
https://velog.io/@matisse/Poetry-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%82%AC%EC%9A%A9%EA%B8%B0
https://dailyheumsi.tistory.com/244
https://velog.io/@snoop2head/no-more-conda-please-pyenv-poetry-please
https://blog.gyus.me/2020/introduce-poetry/
https://dev.to/mariazentsova/how-to-share-jupyter-notebook-on-github-with-poetry-2cdi https://dev.to/mariazentsova/how-to-share-jupyter-notebook-on-github-with-poetry-2cdi
'Usage' 카테고리의 다른 글
[VSCode] Python 개발 환경 세팅 : Jupyter Notebook & Colab in Visual Studio Code (0) | 2022.09.29 |
---|---|
[Notion(노션)] 자주 쓰는 단축키 정리 (1) | 2022.01.11 |
[Notion(노션)] 노션 입문할 때 참고하면 좋은 사이트 및 영상 추천 (1) | 2022.01.10 |
[Android Studio(안드로이드 스튜디오)] 유용한 단축키 정리 (0) | 2022.01.07 |
댓글