Home » LANG » PYTHON » poetry export requirements.txt 명령으로 필요 패키지를 뽑아 봅시다.

poetry export requirements.txt 명령으로 필요 패키지를 뽑아 봅시다.

아래 글에서 poetry 그룹에 대해서 배웠습니다. 그룹별로 패키지들을 설치해서 pyproject.toml에 메타 데이터를 넣을 수 있었어요. 이 정보를 토대로 requirements.txt로 내보내는 방법을 배워보겠습니다. 그리고, dev 환경과 production 환경에서 export를 다르게 하는 방법도 배워 봅니다.


main 그룹

먼저 pyptoject.toml 파일을 다시 보도록 하겠습니다.

[그림 1] pyproject.toml 파일

이 파일에는 현재 poetry 프로젝트에서 깔아야 할 패키지들의 메타 정보를 관리합니다. 위 파일은 어떤 정보를 내포하고 있나요?

  • dev 그룹에 pytest가 필요합니다.
  • poetry dependencies에 requests가 필요합니다.

여기서, 우리는 tool.poetry.dependencies를 볼 수 있을 거에요. 이를 main 그룹이라고 합니다. 문서에도 나와 있는 부분입니다. 이 경우, 아래와 같이 정리할 수 있습니다.

메인 그룹에는 requests 패키지를 깔아야 하는구나. 그리고 dev 그룹에는 pytest를 깔아야 한다. 이게 다입니다. 이제, 아래 명령어를 실행해 보겠습니다.

[그림 2] export 명령어 수행하기

-o는 export를 할 대상 파일을 의미합니다. 그리고 –without-hashes는 해시 값 없이 export 하는 것을 의미해요. 보통, 이 두 옵션은 poetry export requirements.txt 를 할 때, default로 넣는 옵션입니다. 그런데, 이렇게만 실행하면, 디폴트로 main group에 속하는 것들만 export를 하게 됩니다. 이게 무슨 소리인가? 제가 대상 파일을 requirements_prod.txt로 지정했어요. 이 파일을 보겠습니다.

[그림 3] export 된 파일

보시면, requests, .. 등등 여러 패키지가 보여요. 안 보이는 것은 pytest입니다. 왜?

main 그룹에 속하지 않기 때문입니다. 고로, pytest가 빠진 것이 노란색 부분만 export 되게 됩니다. 다시 말해, tool.poetry.dependencies 밑에 있는 패키지들만 깔게 된다는 의미입니다.


–with, –only 옵션 알아보기

그러면, dev 그룹에 있는 것도 같이 export 하려면 어떻게 해야 할까요? 이 경우, –with dev를 사용해 주시면 됩니다. 같이라는 뜻에서 짐작하셨듯, dev도 같이 export 한다는 의미입니다.

[그림 4] –with 옵션을 주어서 export 하기

poetry export –with dev –without-hashes -o requirements_dev.txt 명령어를 입력해 보겠습니다.

[그림 5] export 된 파일

보시면, 아까와는 다르게 pytest 패키지가 추가되었음을 볼 수 있어요. 왜 그럴까요? dev 그룹에 속한 패키지까지 모두 내보냈기 때문이에요. 즉 –with dev를 하면, dev 그룹에 속한 패키지들에 대한 정보까지 같이 내보내집니다.

고로, requests 뿐만이 아니라 pytest 까지 같이 내보내지게 됩니다. 이 옵션 dev와 prod 분리할 때 상당히 많이 쓰이는 편이니 반드시 알아두셔야 합니다. 1 반대로 –only dev 옵션을 주면 어떨까요?

[그림 6] –only 옵션을 써서 export를 하기

이 경우, 오직 dev만 export 하게 됩니다. main 그룹은 export 대상에 포함되지 않아요. 실제로 export 된 파일을 보면 아래와 같습니다.

[그림 7] export 된 파일

뭔가 많아 보입니다. 그런데, 여기서 중요한 것은 requests가 없다는 것입니다. 왜? –only 옵션 뒤에 딸려온 dev 그룹에 속하지 않기 때문입니다.

그림으로 그리자면, 노란색 부분인 dev 그룹만 export 한 셈입니다. 다만, 이 옵션은 –with 옵션보다 덜 쓴 명령어였습니다. 잘 쓰이진 않을 듯 합니다.

이 글에서 설명한 poetry export requirements.txt 명령에 대해서 정리를 해 봅시다.

  • –without-hashes (해시값 없이 export)
  • -o (export할 파일)
    • 이 두 명령은 매우 자주 쓴다고 했습니다. 그냥 외워두시거나 쉘 스크립트 파일로 만드시거나 하시면 좋습니다.

다음에, pyproject.toml에 그룹들에 대한 정보와 거기에 속한 package들이 있습니다.

  • 기본적으로 main group에 속한 것들만 export 됩니다.
  • –with 옵션을 주어서 그룹에 있는 package들을 추가로 export 할 수 있습니다.

이 정도만 이해하시면 됩니다.

  1. 그럴 법도 한 것이 dev 환경에서만 쓰는 pytest 라던가 하는 것들이 있거든요. ↩︎

Leave a Comment

15 − 10 =