ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Poetry로 Python 개발환경 만들기
    Python 2021. 7. 18. 22:18

    개발 중 제일 어렵다는 개발환경 만들기. 대부분의 언어는 패키지 매니저가 존재합니다. 기본 내장 라이브러리 외에 사용자 라이브러리를 써야 할 일이 많기 때문이죠. 오늘은 파이썬의 패키지 매니저 Poetry에 관해 소개하려고 합니다.

     

    Poetry 공식 홈페이지: https://python-poetry.org/

     

    Poetry - Python dependency management and packaging made easy

    Dependency resolver Poetry comes with an exhaustive dependency resolver, which will always find a solution if it exists. And get a detailed explanation if no solution exists. Isolation Poetry either uses your configured virtualenvs or creates its own to al

    python-poetry.org

    공식 문서에 Poetry는 다음과 같이 소개합니다.

    Poetry is a tool for dependency management and packaging in Python. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you.
    Peotry는 의존성 관리와 패키징을 위한 툴이다. 프로젝트의 의존성을 정의할 수 있고 그것을 설치 및 업데이트할 수 있게 해 준다.

     

    이전에 virtualenv 같은 것으로 가상 환경을 만들고 requirements.txt 파일에 디펜던시를 정의하고

    pip install -r requirements.txt

    같은 명령어로 관련 라이브러리를 설치했다면 Peotry는 이 과정을 pyproject.toml 파일에 정의함으로써 간단하게 처리할 수 있습니다. virtualenv 따로 만들 필요도 pip 명령어로 패키지 설치할 필요도 없죠. Poetry를 처음 사용했을 때 Javascript의 패키지 매니저인 yarn과 비슷한 느낌을 받았습니다. 사용법도 비슷한 거 같네요.

     

    반응형

     

    그럼 지금부터 어떤 식으로 사용하는지 사용법을 소개해드리도록 하겠습니다. 실 사례로 소개해드리는 것이 더 와닿을 거 같다는 생각에 FastAPI를 이용한 웹 서버 개발 프로젝트를 Peotry로 패키지 관리하는 것을 보여드리겠습니다. 실제로 이후에 FastAPI로 웹 개발하는 주제도 포스팅하도록 하겠습니다.

     

    당연히 Python은 설치되어 있어야겠죠? 본 글에서는 3.8 기준으로 실습하도록 하겠습니다. 만약 Python 버전을 여러 개 사용하고 싶다면 Pyenv라는 것을 사용하면 됩니다.

     

    일단 Poetry를 설치하도록하죠. 여기에 가보시면 OS에 따라 설치하는 방법이 나와있습니다. 앞으로 나올 버전은 Python 3.5 이하를 지원하지 않는다고 하니 Python은 최소 3.6 이상을 사용해주세요.

     

    맥이나 리눅스의 경우는 터미널을 여시고 아래와 같은 명령어를 입력합니다.

    curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -

     

    윈도우 파워쉘의 경우는 다음과 같습니다.

    (Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python -

     

    설치가 완료됐다면 아래와 같은 명령어를 입력해보세요.

    poetry --version

     

    Poetry 버전이 제대로 출력됐다면 설치가 잘 됐습니다.

     

    이제 Poetry를 사용한 새로운 프로젝트를 위해 폴더를 하나 만들어볼까요?

    mkdir fastblog-project
    cd fastblog-project

     

     

    이제 Poetry를 이용해서 프로젝트 초기 세팅을 합니다.

    poetry init

    패키지 이름, 패키지 버전, 설명, 작성자 등을 입력하라고 합니다. 나중에 작성해도 괜찮으니 엔터를 마구 눌러주도록 합니다. 그러면 pyproject.toml이라는 파일이 하나 생깁니다. 엔터를 연발하며 자동으로 생성된 pyproject.toml이 어떻게 생겼는지 볼까요? 대략 아래와 같은 모습을 볼 수 있습니다.

    [tool.poetry]
    name = "fastblog-project"
    version = "0.1.0"
    description = ""
    authors = ["mattpy <mattpy@example.com>"]
    
    [tool.poetry.dependencies]
    python = "^3.8"
    
    [tool.poetry.dev-dependencies]
    
    [build-system]
    requires = ["poetry-core>=1.0.0"]
    build-backend = "poetry.core.masonry.api"

     

    이제 FastAPI를 설치해보고 간단한 웹서버를 구동시켜봅시다.

    poetry add fastapi

    위 명령어를 실행하면 poetry.lock 파일이 생성되고 pyproject.toml 파일이 변경되었을 것입니다. pyproject.toml 파일이 어떻게 변경됐는지 볼까요?

    [tool.poetry]
    name = "fastblog-project"
    version = "0.1.0"
    description = ""
    authors = ["mattpy <mattpy@example.com>"]
    
    [tool.poetry.dependencies]
    python = "^3.8"
    fastapi = "^0.66.0"
    
    [tool.poetry.dev-dependencies]
    
    [build-system]
    requires = ["poetry-core>=1.0.0"]
    build-backend = "poetry.core.masonry.api"

    [tool.poetry.dependencies]에 fastapi = "^0.66.0" 이 생성된 것을 볼 수 있네요. poetry.lock 은 Poetry를 통해 설치된 패키지의 상세한 버전 정보가 담겨있습니다. 이제 FastAPI 가 설치됐으니 간단한 웹서버를 만들어 봅시다.

     

    pyproject.toml 이 있는 디렉토리에 main.py라는 파일을 만들고 아래와 같이 작성합니다.

    from fastapi import FastAPI
    
    app = FastAPI()
    
    
    @app.get("/")
    def index():
        return {"message": "Hello World"}

    이것만으로는 웹서버를 구동시키기에 부족합니다. uvicorn 이라는 것을 설치해보도록 하겠습니다.

    poetry add uvicorn

    이제 준비가 된 거 같습니다. 다음 명령어를 입력해보죠.

    poetry run uvicorn main:app

    아래와 같이 서버가 실행됐다는 메시지가 나오면 성공입니다. 

    INFO:     Started server process [80120]
    INFO:     Waiting for application startup.
    INFO:     Application startup complete.
    INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

    브라우저를 열고 http://localhost:8000에 접속하면 이런 화면이 보일 것입니다.

    원래대로라면 uvicorn main:app 이런 식으로 명령어를 입력했겠지만 poetry run을 앞에 붙임으로써 poetry 가 관리하는 가상 환경으로 uvicorn을 동작시킵니다.

     

    만약 virtualenv와 같은 가상 환경을 이용한다면 어떨까요?

    가상 환경을 구성할 폴더를 따로 관리하고 activate 를 통해 가상환경을 활성화시키고 pip으로 패키지를 설치하고 requirements.txt를 만들어 패키지 버전을 관리했을 것입니다. 

    mkdir fastblog-project
    cd fastblog-project
    virtualenv -p python3 .venv
    source .venv/bin/activate
    pip install fastapi
    pip install uvicorn
    pip freeze > requirements.txt
    # main.py 가 존재한다고 가정
    uvicorn main:app

    대략 이런 식으로 관리했을 것입니다. 지금은 별거 아닌 것처럼 보여도 사용하는 패키지 수가 늘어나게 된다면 패키지 간 의존성 관리가 힘들어집니다. 이런 수고스러움을 poetry를 통해 쉽게 해결할 수 있습니다.

     

    poetry --help로 poetry 명령어 사용법을 볼 수 있으니 poetry add 명령어 외에도 다양한 명령어를 통해 파이썬 프로젝트 패키지 관리를 해보시길 바랍니다.

    반응형

    댓글

Designed by Tistory.