[Tistory] Poetry 분리환경 구축기 A-Z (docker-poetry-jupyter 조합)

원글 페이지 : 바로가기

이 글이 도움 되셨다면 광고 클릭 부탁드립니다 최근 pandas2.0/autogluon 등 새로운 라이브러리들이 써보고 싶어서 pip로 무지성 업그레이드를 해버렸고, 배치로 돌아가던 ML모델이 돌아가지 않는 이슈를 맞이했습니다;; 영영 옛 버전의 라이브러리를 사용할 수 없기에 분리 환경을 구축해보려고 합니다. 단순하게 분리되는 환경은 가상환경을 만들어 사용할 수 있겠지만, 라이브러리 간의 의존성 관리부터 패키징까지 편하게 도와주는 Poetry를 이번 기회에 셋팅해보려고 합니다. https://python-poetry.org/docs/ Introduction | Documentation | Poetry – Python dependency management and packaging made easy If you installed using the deprecated get-poetry.py script, you should remove the path it uses manually, e.g. rm -rf “${POETRY_HOME:-~/.poetry}” Also remove ~/.poetry/bin from your $PATH in your shell configuration, if it is present. python-poetry.org 본 포스트에서는 간단하게 poetry가 무엇인지 알아보고, 맥 OS에서 도커를 설치하고 도커 환경 내에서 poetry를 설치하고 주피터 커널에 추가하는 모든 과정을 정리해보려고 합니다. 0. Poetry란?! python 프로젝트의 패키지 의존성을 관리 및 빌드 시스템을 위한 라이브러리로 프로젝트 관리하는 것을 쉽고 일관되게 만들 수 있게 도와주는 라이브러리입니다. (프로젝트 별로 가상 환경을 생성해서 의존성관리하여 프로젝트 완전 분리를 가능 -> 배포 용이) – 주요 특징 – 간편한 종속성 관리 – 특정 패키지에서 요구하는 dependency 조건에 맞는 버전의 패키지들만 설치 가능 – A 패키지 버전업을 했더니 갑자기 B패키지(A패키지 버전 조건 존재)가 안되는 경우를 방지할 수 있음 – pip와 pipenv에서는 아직 완벽하게 처리되지 못함 – pyproject.toml/poetry.lock 파일에 해당 프로젝트에서 사용되는 패키지 모두 기록 – lock 파일만 있으면 현재 프로젝트와 완전 동일한 환경 구성 가능 -> 배포에 용이 – pip는 직접 requirements.txt 작성 필요 – 가상환경 지원 – 기본적으로 각 프로젝트마다 격리된 가상환경을 생성하여 프로젝트 간 충돌 방지 & 일관된 환경 유지 가능 – pip는 가상환경을 구축하지 않으면 전역에 패키지를 설치해서 다른 환경에 영향을 주게 됨 1. Docker 환경 준비 1.1 Docker install 우선 컴퓨터 사양에 맞는 도커 설치 파일을 찾아 다운받고 실행해 주면 간단하게 도커를 설치할 수 있습니다. 참고로 M1칩 이상부터는 Apple silicon 버전을 선택해 다운받으면 됩니다. https://docs.docker.com/desktop/install/mac-install/ Install Docker Desktop on Mac Install Docker for Mac to get started. This guide covers system requirements, where to download, and instructions on how to install and update. docs.docker.com 간단하게 설치하고 터미널 창을 켜 도커 버전을 확인하여 정상 설치된 것을 확인할 수 있습니다. # 설치된 도커 버전 확인
docker –version 1.2 Docker image pull 도커 허브에는 다양한 이미지들이 있는데 셋업하고 싶은 이미지를 pull해오면 아주 간단하게 분석 환경을 구축할 수 있습니다. 저는 tensor flow2.13 버전 이미지를 가져와서 추가로 파이썬 3.11을 깔고 3.8/3.11 두 가지 버전 파이썬을 사용할 수 있는 환경을 만들어보려고 합니다. https://hub.docker.com Docker Hub Container Image Library | App Containerization Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you’ll increase trust, boost discoverability, get exclusive data insights, and much more. hub.docker.com pull해오는 방법은 아래 커맨드로 가능하고 잘 가져와졌는지 이미지 리스트도 출력해 봅니다. # 이미지 pull
docker pull tensorflow/tensorflow:2.13.0
# 가져온 이미지 확인
docker images 1.3 Docker container run 받아온 이미지를 바탕으로 도커 컨테이너를 실행해볼텐데요, 컨테이너의 이름/ port/ mount할 경로/ 이미지 정보를 담아 도커를 생성할 수 있습니다. # 컨테이너 생성
docker run -it –name hidocker -p 8888:8888 -v /Users/user/docker:/home/hikim tensorflow/tensorflow:2.13.0 만약 마운트 권한이 없다고 나오면 docker client 실행하여 file sharing에 마운트 할 경로를 추가하면 됩니다. # 도커 내부 우분투 버전 확인
lsb_release -a
## Ubuntu 20.04.6

# 우분투 패키지 업데이트
apt-get update

# vim 설치
apt-get install vim

# python3.11 install
apt-get install software-properties-common
add-apt-repository ppa:deadsnakes/ppa
apt-get update
apt-get install python3.11
python3.11 –version 2. Poetry 시작하기 참고로 poetry는 python 3.8 이상에서만 지원한다고 합니다. 2.1 Poetry install # 설치
curl -ssl https://install.python-poetry.org/ | python3
(pip install poetry로도 설치됨)

# 경로 설정
export PATH=”$HOME/.local/bin:$PATH”

# 버전 확인
poetry –version
## version 1.8.2 2.2 setup poetry project # create new project, py3.11-project1라는 디렉토리 생성
poetry new py3.11-project1

# 기존 진행 프로젝트가 있다면 해당 경로에서 init
cd pre-existing-project
poetry init # py3.11-project1는 아래와 같은 구조를 가짐
py3.11-project1
├── pyproject.toml
├── README.md
├── poetry_demo
│   └── __init__.py
└── tests
    └── __init__.py

# 프로젝트가 생성되면 아래와 같은 pyproject.toml 생성됨
[tool.poetry]
name = “py3-11-project1”
version = “0.1.0”
description = “”
authors = [“Your Name “]
readme = “README.md”
packages = [{include = “py3”}]

[tool.poetry.dependencies]
python = “^3.8”

[build-system]
requires = [“poetry-core”]
build-backend = “poetry.core.masonry.api” 이렇게 하면 기본으로 설정된 python3.8버전으로 만들어주기 때문에 poetry가 사용하는 python 버전을 바꿔서 다시 만들어보겠습니다. 아래 명령어로 간단하게 변경이 가능합니다. 잘 되었는지 env info를 통해 확인합니다. 추가로 toml 파일에서도 python=”^3.11″ 로 변경을 해줘야지 3.11에 맞는 파이썬 버전이 설치가 됩니다. pandas 2.2.1 을 받는 데 dependencies에 정의된 파이썬 ^3.8이면 아예 설치가 안됩니다!(poetry가 확실히 의존성관리는 잘하는 것 같습니다) # poetry가 사용하는 파이썬 버전 변경
poetry env use python3.11 (toml파일 수정안하면 맞이하는 에러, 판다스2.2.1은 파이썬 3.9이상만 지원!) # 패키지 추가
# add a new package to poetry virtual env
poetry add pandas

## with specific version
poetry add pandas@2.2.0

# 패키지 삭제
poetry remove pandas

# 패키지 업데이트, 의존성 패키지들을 ipdate라고 poetry.lock 파일도 같이 update
poetry update

## with specific package
poetry update pandas

# 패키지 확인, –tree 옵션을 추가하면 의존성 트리 보여줌
poetry show –tree poetry show하게되면 아래와 같이 설치된 패키지의 디펜던시 트리를 볼 수 있습니다. 2.3 installing dependencies toml 파일에 정의된 스펙으로 가상환경을 생성해보겠습니다. # installing dependencies, pyproject.toml에 명시된 의존성대로 설치하고 가상환경 생성
poetry install

# 가상환경이 잘 생성되었는 지 확인
poetry env list 2.4 add kernel in jupyter (작성중…) # poetry 가상환경 activate
poetry shell

# 생성한 가장환경 정보 확인
poetry env info

# activate된 가상환경 및 생선한 가상환경 확인
poetry env list
poetry add jupyter ipykernel

# 가상 환경 삭제
poetry enc remove [경로]

# 일단 이걸로 도전
poetry run ipython kernel install –user –name python-3.11 –display-name python3.11

# 이게 맞나?
python3.10 -m ipykernel install –user –name python-3.11 –display-name “python3.11”

# jupyter kernel로 잘들어갔는지 확인
jupyter kernelspec list 참고한 사이트 https://python-poetry.org/docs/ https://realpython.com/dependency-management-python-poetry/ https://velog.io/@hj8853/Poetry%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EB%A7%8C%EB%93%A4%EA%B8%B0 https://velog.io/@qlgks1/python-poetry-%EC%84%A4%EC%B9%98%EB%B6%80%ED%84%B0-project-initializing-%ED%99%9C%EC%9A%A9%ED%95%98%EA%B8%B0

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다