이 글이 도움 되셨다면 광고 클릭 부탁드립니다
최근 pandas2.0/autogluon 등 새로운 라이브러리들이 써보고 싶어서 pip로 무지성 업그레이드를 해버렸고, 배치로 돌아가던 ML모델이 돌아가지 않는 이슈를 맞이했습니다;; 영영 옛 버전의 라이브러리를 사용할 수 없기에 분리 환경을 구축해보려고 합니다.
단순하게 분리되는 환경은 가상환경을 만들어 사용할 수 있겠지만, 라이브러리 간의 의존성 관리부터 패키징까지 편하게 도와주는 Poetry를 이번 기회에 셋팅해보려고 합니다.
https://python-poetry.org/docs/
본 포스트에서는 간단하게 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/
간단하게 설치하고 터미널 창을 켜 도커 버전을 확인하여 정상 설치된 것을 확인할 수 있습니다.
# 설치된 도커 버전 확인
docker --version
1.2 Docker image pull
도커 허브에는 다양한 이미지들이 있는데 셋업하고 싶은 이미지를 pull해오면 아주 간단하게 분석 환경을 구축할 수 있습니다. 저는 tensor flow2.13 버전 이미지를 가져와서 추가로 파이썬 3.11을 깔고 3.8/3.11 두 가지 버전 파이썬을 사용할 수 있는 환경을 만들어보려고 합니다.
https://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 <you@example.com>"]
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
'Programming > Python' 카테고리의 다른 글
Flask로 모델 서빙하기 | 실습 (0) | 2022.11.01 |
---|---|
PyOD 라이브러리로 간단하게 이상치 탐지하기 (3) | 2022.10.19 |
plotly와 dash로 만드는 python dashboard 기초 (0) | 2022.10.19 |
PyTorch란 무엇일까?! with GANomaly (0) | 2022.10.19 |
Pandas Cheat Sheet (0) | 2022.10.19 |