Home » LANG » PYTHON » poetry package dev 에서만 설치되게 해 봅시다.

poetry package dev 에서만 설치되게 해 봅시다.

python 프로젝트를 할 때, poetry를 이용하는 편입니다. dependency 관리가 되기 때문입니다. dev 환경이냐, production 환경이냐에 따라 설치되어야 할 패키지와 그렇지 말아야 할 패키지들이 있는데요. 이들을 어떻게 관리하는지 간단하게 알아보겠습니다.

그리고, poetry package dev 환경에서만 설치되게 하는 명령어도 알아봅시다.


pyproject.toml 파일 읽어보기

자세한 내용은 볼 필요 없습니다. 중요한 것만 보겠습니다.

[그림 1] fastapi project toml일부

위 그림은 fastapi 프로젝트에 있는 toml 파일 중 일부입니다. tool.poetry에는 갖가지 메타 정보가 들어갑니다. 그 다음 9번째 줄에 tool.poetry.dependencies가 있습니다. 유추해 보자면, 의존성이라고 말할 수 있습니다.

이 의존성에, fastapi와 alembic이 있는 것을 볼 수 있습니다.

  • fastapi
    • 파이썬 웹 프레임워크
  • alembic
    • 데이터베이스를 migration을 하기 위한 package.

이로 미루어 보았을 때, poetry 가상 환경에 설치되는 패키지들이라고 생각해 볼 수 있습니다.

즉, poetry install을 했을 때, fastapi, alembic 등이 설치된다고 할 수 있습니다. 보통 local에서는 poetry 등으로 패키지 관리를 하고, docker에 올릴 때에는 pip와 requirements.txt를 이용해서 설치하곤 해요.

고로, 이 정보를 requirements.txt에 export를 하면 됩니다. pytest와 같이 local 에서만 쓰는 패키지는 따로 관리할 필요가 있어요. 이럴 때에는 어떻게 하면 될까요? poetry add를 할 때, –group 옵션을 주면 됩니다.


poetry add –group 옵션으로 관리하기

package1을 추가할 때, –group v를 주면, 그룹 v에만 package1을 추가하겠다는 정보를 lock 파일에 추가합니다. 이건 또 무슨 이야기인가? 실습을 한 번 해 봅시다.

[그림 2] 새 프로젝트에 requests 추가하기

먼저, requests를 추가했어요. 그런데, –group 옵션이 들어가지 않았어요. 이러면, 전역으로 추가한다는 것을 의미합니다. 이 상황을 그림으로 그려보면 아래와 같습니다.

poetry 공식 문서에서는 main 이라고 하고 있어요. 이제 아래 명령어를 입력해 볼 거에요.

[그림 3] dev 에만 pytest 패키지 추가하기

–group dev를 입력해서, poetry package dev 에만 설치되게 했습니다. 그래서 어떤 일이 일어났는가? 그림으로 그려보겠습니다.

그룹 dev에만 pytest 패키지에 대한 정보가 들어갔어요. poetry에서는 특정 그룹에 속한 패키지, 특정 그룹에 속하지 않은 패키지만 export 할 수 있는 옵션을 제공하는데요. 위의 경우, dev 그룹에 속해있는 패키지만 제외하고 export를 하면, pytest가 제외되게 됩니다.

그러면, pyproject.toml에 어떤 정보가 들어갔는지 보겠습니다.

[그림 4] 새 project의 toml 파일의 읠부

먼저 requests는 tool.~.dependencies에 들어가 있어요. 반면, pytest는 group.dev.dependencies에 들어가 있어요. 이는 무슨 말인가? 그룹 dev의 패키지로만 pytest가 들어가 있다는 것을 의미합니다.


잘 적용되었나 확인해 보기

그러면, 의도대로 잘 적용되었는지 확인해 볼까요?

[그림 5] poetry show –with dev의 결과

먼저, poetry show는 모든 가능한 패키지 목록을 봅니다. –with dev 옵션을 붙였으므로, dev에만 선택적으로 붙어있는 패키지도 불러옵니다. pytest가 그림 5에서 보이는 것을 보면 정확히 알 수 있습니다.

[그림 6] poetry show –without dev의 결과

반면 이 경우는 어떤가요? dev에 선택적으로 붙어있는 패키지를 제외하였습니다. 즉, toml 파일에서 봤던, dev 그룹의 의존성이 제외됩니다. pytest가 그림 6에서 안 보이는 것을 보면 알 수 있어요. 즉, export를 할 때에도 dev 그룹의 의존성을 제외하고 export를 하면 production용 정보를 export 할 수 있다는 이야기가 됩니다.


정리

정리하면 poetry add를 할 때 아래와 같이 하면 dev 에서만 의존성을 가지는 패키지 정보를 추가할 수 있습니다.

  • poetry add package –group dev

그리고, 이 그룹에 대한 개념을 이해하는 것이 꽤 중요하니 알아두면 좋습니다.

Leave a Comment

17 + 11 =