Breaking Changes in Poetry 2.0.0

Poetry 2.0.0의 Breaking Changes 요약

Poetry 2.0.0 릴리스에서는 기능 개선과 현대 표준에 맞춘 변경을 위해 여러 Breaking Changes와 제거된 기능이 도입되었습니다. 주요 변경 사항을 아래에 요약합니다.


1. 플러그인 전용 명령어


2. poetry lock의 기본 동작 변경


3. poetry add --optional의 동작 변경


4. 디렉토리 전환(--directory/-C)의 동작 변경


5. tool.poetry.include의 일관된 동작


6. 설정 변경


7. Deprecated 및 제거된 기능


이러한 변경 사항은 Poetry의 기능을 크게 발전시키며, 플러그인 및 업데이트된 워크플로우 채택을 장려하고 더 이상 사용되지 않는 기능과 동작을 단계적으로 제거하기 위한 목적을 가지고 있습니다.


Q. tool.poetry.dependencies 섹션은 어디로 가야 하는가?

Poetry 2.0.0에서는 tool.poetry.dependencies에 정의된 의존성을 리팩터링하는 방법이 변경되었습니다. 아래는 이를 처리하는 방법에 대한 요약입니다.

1. 기본 리팩터링: project.dependencies로 이동

[tool.poetry.dependencies]
requests = "^2.28"

이를 다음과 같이 변경합니다:

[project.dependencies]
requests = "^2.28"

Dependency groups: poetry는 기본적으로 [project.dependencies]에 정의된 의존성들을 암묵적으로 main 그룹으로 간주합니다.


2. Poetry 고유 기능 사용 시: 병행 사용

[project.dependencies]
requests = "^2.28"

[tool.poetry.dependencies]
requests = { version = "^2.28", extras = ["security"] }

3. 완전한 의존성 동적 선언

[project]
dependencies = ["dynamic"]

[tool.poetry.dependencies]
requests = "^2.28"

4. Deprecated 필드 확인

poetry check

이 명령어는 pyproject.toml 파일에서 더 이상 사용되지 않는 필드와 대체 항목을 알려줍니다[1].


5. 리팩터링 후 검증

poetry install
poetry lock --check

이와 같은 접근 방식을 통해 기존의 tool.poetry.dependencies 설정을 최신 표준과 호환되게 리팩터링할 수 있습니다.

Q. 그러면 tool.poetry.group.*는 어떻게 되는가?

https://python-poetry.org/docs/managing-dependencies#dependency-groups

그대로 사용하면 된다. 예를 들면..

[tool.poetry.group.test.dependencies]
pytest = "^6.0.0"
pytest-mock = "*"

따라서 이 의존성들은 poetry에 의해서 관리되기 때문에 배포환경에선 설치되지 않는다. 추후 PyPI에 퍼블리싱해도 의존성에 나타나지 않게된다.

Poetry 2.0.0에서는 기존에 사용하던 tool.poetry.group.dev.dependencies 섹션이 그대로 유지됩니다. 따라서 별도의 이동이나 리팩터링이 필요하지 않습니다. 개발 의존성은 여전히 dependency groups 기능을 통해 관리되며, tool.poetry.group.dev.dependencies는 그대로 사용 가능합니다.


Dependency Groups 유지 및 활용

  1. 기존 구조: 아래와 같은 구조는 여전히 유효합니다.

    [tool.poetry.group.dev.dependencies]
    pytest = "^7.1.2"
    pytest-cov = "^3.0"
    
  2. 설치 명령어:

    • 개발 의존성만 포함하여 설치하려면 다음 명령어를 사용합니다:

      poetry install --with dev
      
    • 개발 의존성을 제외하고 설치하려면:

      poetry install --without dev
      
  3. 새로운 그룹 추가:

    • 새로운 그룹을 추가하려면 -G 옵션을 사용합니다:

      poetry add <패키지명> -G <그룹명>
      
    • 예를 들어, 테스트 그룹에 pytest를 추가하려면:

      poetry add pytest -G test
      

Poetry 2.0에서의 변화

Poetry 2.0에서도 dependency groups는 동일한 방식으로 지원됩니다. 따라서 tool.poetry.group.dev.dependencies 섹션은 유지되며, 개발 의존성을 명확히 구분하여 관리할 수 있습니다[1][3][4].


검증

리팩터링 후 또는 새로운 그룹 설정 후에는 아래 명령어로 설정이 올바른지 확인하세요:

poetry check
poetry lock --check

결론적으로, tool.poetry.group.dev.dependencies는 변경 없이 그대로 사용하면 됩니다.