Poetry 프로젝트 만들어보기

kim 개인기록용·2024년 7월 29일

poetry

목록 보기
2/2

Poetry 프로젝트 만들기

VS Code에 프로젝트 생성하기

일단 VS Code를 설치하고, VS Code에 Python 확장기능을 설치해준 다음이다.
좌측 툴바에서 Explorer을 선택하고 Workspace로 쓸 경로를 열어준다.
데모를 만들기 위해 새로운 폴더를 하나 생성하고 폴더에서 오른쪽 버튼을 눌러 터미널을 열어준다.

터미널에서 초기화를 위해 init 명령어를 수행하면, pyproject.toml 생성하는 절차를 수행하게 된다.

위 사진에서 보이는 Generated file의 형태대로 pyproject.toml 파일이 생성됨을 확인할 수 있다.
이제 테스트를 위한 파일을 하나 작성해보자.
app 폴더를 생성해준 후 main.py 파일을 만들어보자.

def main():
    print("Hello, World!")

if __name__ == "__main__":
    main()

그리고 터미널에서 run을 하면 출력되는 것을 확인할 수 있다.

PS C:\workspace\python_project\poetry-my-demo> poetry run python ./app/main.py
Hello, World!

Poetry에 FastAPI 사용 설정하기

fastapi를 이용한 웹서버 구축을 위해 프로젝트를 설정해보자.
일단 fastapi 모듈을 추가해줘야 한다.
간단하게 poetry add 명령어를 이용할 수 있다.

poetry add fastapi uvicorn

이렇게 하면 pyproject.toml에 fastapi, uvicorn의 dependency가 추가된 것을 확인할 수 있다.

아까 작성한 main.py 파일의 내용을 바꿔서 fastapi가 구동되도록 해보자.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

터미널에서 아래 명령어로 실행해준다.

poetry run uvicorn app.main:app


postman으로 단순하게 호출해보면 Hello World가 응답됨을 확인할 수 있다.

Debug 모드로 띄워보기

poetry로 프로젝트를 구축하게 되면, vscode에서 파이썬 인터프리터를 잘 잡지 못하는 경우가 있다.
나는 지금 fastapi를 설치 했는데, vscode에서 기본으로 잡히는 인터프리터는 내 pc에 깔려있는 파이썬을 바라보고 있기 때문에 fastapi 라는 모듈이 없다는 에러를 뱉는다.
이런 문제가 발생한다면, poetry가 가상환경을 프로젝트 내부에 잡도록 설정을 바꿔주고 프로젝트의 파이썬 인터프리터를 venv 폴더로 바라보게끔 해주면 된다.
터미널에서 아래와 같이 poetry 설정을 변경해주고 vscode를 재시작한다.

poetry config virtualenvs.in-project true
poetry config virtualenvs.path "./.venv"
poetry install && poetry update

그리고 F1 키를 눌러 Python: Select Interpreter를 선택해서 프로젝트 폴더에 구성된 가상환경으로 잡아준다.

이렇게 하고 run and debug에서 Python Debugger를 선택해준다. FastAPI로 선택하면 알아서 잘 된다.

이렇게 하면 디버그 모드로 서버가 구동되고, 브레이크 포인트를 하나 잡은 다음 호출해주면 디버그 모드로 잘 진입하는 것을 볼 수 있다.

run and debug에서 Add Configuration을 선택해서 launch.json 파일을 아래와 같이 작성해주고 Python Debugger: my-poetry-demo 를 선택해서 띄워도 된다.

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python Debugger: my-poetry-demo",
            "type": "debugpy",
            "request": "launch",
            "cwd": "${workspaceFolder}",
            "module": "uvicorn",
            "args": [
                "poetry-my-demo.app.main:app",
                "--reload"
            ],
            "jinja": true
        }
    ]
}

0개의 댓글