다용도 로컬 파이프라인 구성

Poetry + 도커컨테이너 모듈 의존성 간편화1

필만이 2024. 6. 12. 22:41

실습환경 : 윈도우 내 리눅스(우분투)

 

Poetry의 기능

  • 의존성 관리: Poetry는 프로젝트의 모든 의존성을 한 곳에서 관리할 수 있습니다. 의존성을 설치, 업데이트, 제거하는 작업을 쉽게 수행할 수 있습니다.
  • 가상환경 관리: Poetry는 각 프로젝트마다 가상환경을 자동으로 생성하고 관리합니다. 이를 통해 의존성 충돌을 피하고, 프로젝트 간 독립성을 유지할 수 있습니다.
  • 패키징 및 배포: Poetry는 프로젝트를 패키징하고 배포하는 과정을 간단하게 처리할 수 있습니다. pyproject.toml 파일에 정의된 정보를 바탕으로 패키징을 수행합니다.
  • requirements 시럽자..

Poetry 설치방법

  • 프로젝트 이름을 에어플로우로 하고 폴더 만듦
    $ mkdir airflow
  • airflow 폴더로 이동
    $ cd airflow
  • poetry 설치
    $ curl -sSL https://install.python-poetry.org | python3 -
    또는
    $ pip install poetry
    로 설치

  • poetry 초기설정
    $ poetry init
    설정은 크게 할건 없고 대충 읽어보고 하면된다. 단 파이썬 버전은 ^3.8로 했다.
    예전에 airflow 2.7.3과 python 3.8로 했을때 무리 없이 잘된던 기억 때문에. 
    (나머지 설정 모르겠으면 GPT 검색)
    -> 설정 완료시 모듈 이름과 버전이 적힌 pyproject.toml 파일이 생긴다.
  • poetry.lock 생성
    아무 모듈이나 처음 설치하면 생성된다. 예를 들어 
    $ poetry add requests
    -> 기존의 pip install requests 명령어와 같은 역할이라 보면된다. 다만 버전이 충돌나지 않게 알아서 설치해준다.

Dockerfile에 poetry 설치 내용 삽입

FROM apache/airflow:2.7.3
USER root

RUN apt-get update && apt-get install -y openssh-client
USER airflow
WORKDIR /app
COPY pyproject.toml poetry.lock /app/
RUN pip install poetry && poetry install
COPY . /app
  • 위와 같이 생성했던 pyproject.toml, poetry.lock 두 파일을 컨테이너 내부로 이동 시킨 뒤 설치
  • docker-compose.yaml 파일은 아래 명령어로 받음
    curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.7.3/docker-compose.yaml'yaml 파일 
  • yaml 파일 고친부분
    현재 폴더에 있는 도커파일로 빌드하게 함 
      # image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.7.3}
      build: .
  • 이미지 빌드후 컨테이너 올림
    $ docker-compose up --build

  • poetry shell에 접속해 여기서도 설치된지 확인
    $ poetry shell
    Spawning shell within /home/weare/.cache/pypoetry/virtualenvs/airflow-IEpSry0b-py3.10

    (airflow-IEpSry0b-py3.10) $ pip show requests
    Name: requests
    Version: 2.32.3
    Summary: Python HTTP for Humans.
    Home-page: https://requests.readthedocs.io
    Author: Kenneth Reitz
    Author-email: me@kennethreitz.org
    License: Apache-2.0
    Location: /home/weare/.cache/pypoetry/virtualenvs/airflow-IEpSry0b-py3.10/lib/python3.10/site-packages
    Requires: certifi, charset-normalizer, idna, urllib3
    Required-by: 
    (airflow-IEpSry0b-py3.10)

  • pyproject.toml 파일 열어서 제대로 설치된지 확인 
    -> 잘 설치 돼있다.
    [tool.poetry]
    name = "airflow"
    version = "0.1.0"
    description = ""
    authors = ["bgh <makenow90@gmail.com>"]

    [tool.poetry.dependencies]
    python = "^3.8"
    DateTime = "^5.5"
    requests = "^2.32.3"
    selenium = "^4.21.0"

    [tool.poetry.dev-dependencies]

    [build-system]
    requires = ["poetry-core>=1.0.0"]
    build-backend = "poetry.core.masonry.api"

진행하며 생겼던 오류 : https://makenow90.tistory.com/2

 

Poetry 사용 시 도커 컨테이너쉘에서 모듈 미 설치 현상

배경 : 도커와 Poetry를 결합해 컨테이너 구축. 이후 request 모듈 설치후 컨테이너 쉘에서도 설치 됐는지 체크해봤는데,설치가 안돼있음. 오류 해결과정컨테이너 쉘에 접속후 잘 설치 됐는지 확인d

makenow90.tistory.com


결론

poetry 모듈 의존성 관리의 신세계. requirements.txt 아웃!

그러나 컨테이너에 poetry를 설치하는데는 성공했지만, 도커 내에 poetry 가상환경을 만든꼴이 됐다.
즉 dag 실행 시마다 가상 환경을 활성화 해야 한다.

아래는 좀 더 정상적인 형태로 poetry는 의존성 관리에만 사용하고, 도커 내에서는 가상 환경을 실행하지 않는 방법이다.
(dockerfile 작성에 관한한 아래 내용을 꼭 참조할 것)
https://makenow90.tistory.com/29