새소식

이것저것 개발노트

[FastAPI] [Chapter 5] FastAPI 설치

  • -

docker 이미지를 빌드한 WSL 환경에서 진행 

 

 

FastAPI를 설치하기 전에 설치에 사용할 Poetry에 대해 알아보자.

 

Poetry는 루비의 Bundler나 자바의 Maven과 같이 

파이썬의 패키지 관리를 해 주는 도구이자, 패키지 간의 의존 관계를 해결해 준다.

파이썬에서 가장 원시적인 패키지 관리 도구로 pip가 유명하지만, Popetry는 pip가 하지 못하는

패키지 간 의존성 해결,

lock 파일을 이용한 버전 고정, 

파이썬의 가상 환경 관리 등

더욱 기능적이고 현대적인 버전 관리를 수행할 수 있게 해준다. 

 

Poetry를 사용하는 이유 

Poetry는 고도의 패키지 관리 기능을 제공하는데, 그 중 하나인 가상환경 관리 기능은 '환경을 제한하는 것'을 가능하게 한다. 이 기능은 Docker의 장점과 같다.

 

Poetry 사용 장점은 다음과 같다.

pip에서는 requirements.txt에만 의존하는 반면, Poetry는 pyproject.yaml과 poetry.lock의 두 파일로 패키지를 관리한다. requirements.txt만으로는 설치 시 의존 라이브러리의 버전 고정이 어려워, 의존 라이브러리의 부주의한 업데이트를 유발하는 원인이 될 수 있다.

그 외에도 Poetry는 자신이 만든 프로젝트 자체를 라이브러리로 공개하고 싶을 때에도 이용할 수 있는 것과 같은 여러 장점을 누릴 수 있다. 

 

 

 

Poetry가 의존성을 관리하기 위해 사용하는 pyproject.toml이 존재하지 않으므로, Poetry를 사용하여 FastAPI를 설치하기 위해 의존성을 설명하는 pyproject.toml을 작성한다. 

 

다음 명령어를 실행한다. 

sudo docker compose run \
--entrypoint "poetry init \
	--name demo-app \
	--dependency fastapi \
	--dependency uvicorn[standard]" \
demo-app

 

아래와 같이 나오면 n 과 yes 엔터를 눌러라

 

 

준비한 pyproject.toml을 이용해 FastAPI를 설치한다. 

 

FastAPI를 종속 패키지로 포함하는 Poetry의 정의 파일을 만들었으니 다음 명령어로 FastAPI가 포함된 패키지를 설치한다. 

> sudo docker compose run --entrypoint "poetry install --no-root" demo-app

 

의존 패키지 다운로드가 시작되고 설치가 완료된다.

--no-root 옵션으로 앞으로 생성할 demo-app 패키지 자체를 Poetry의 설치 대상에서 제외하고 있다.

 

설치가 완료되면 프로젝트 디렉터리에 poetry.lock 파일이 생성되었는지 확인해본다. 

 

poetry.lock은 poetry install 시 생성되며, 실제로 설치한 패키지의 정보가 기록되어 있다. 

이것으로 다른 환경에서 새로운 poetry install을 실행했을 때에도 똑같은 패키지 버전을 설치할 수 있다.

 

poetry init과 poetry install 두 명령어로 pyproject.toml과 poetry.lock 파일이 준비되었다.이로써 Docker 이미지를 처음부터 만들 때, FastAPI를 포함한 파이썬 환경을 이미지에 포함시킬 수 있게 되었다.

 

새로운 파이썬 패키지를 추가한 경우, 이미지를 다시 빌드하면 pyproject.toml이 포함된 모든 패키지를 설치할 수 있다.

 

> sudo docker compose build --no-cache

 

 

--no-cache 옵션을 추가하면 pyproject.toml 등에 변경이 있을 때 캐시를 이용하지 않고 다시 빌드를 실행한다. 

 

 

 

Docker 컨테이너 내의 파이썬 환경은 로컬 환경과 경로 정의가 다르기 때문에 그대로 패키지를 참조할 수 없어 오류를 나타내는 밑줄이 표시되어 버린다. 

VSCode에서 Dev Containers의 구조를 사용하여 Docker 컨테이너 내의 파일을 직접 편집할 수 있다. 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.