openlang

확장의 요구사항을 제한할 수 있나요...?

확장의 의존성을 제어할 수 있는지 궁금합니다…

제가 겪은 상황은 이렇습니다.

어떤 의존성들이 있는 Q라는 패키지가 있습니다. 인터페이스를 정의하고 그 인터페이스의 여러 구현도 제공하는 종류의 패키지입니다. 그 구현들이 동작하려면 HTTP 1 같은 의존성이 필요합니다.

저는 지금 R 패키지를 개발하고 있습니다. 거의 완성했고, R의 인터페이스를 구현하는 Q용 확장을 쓰려고 하는데 QRExt라고 하겠습니다. Q는 HTTP가 필요 없으니 Q의 의존성 목록에 그것들을 더하고 싶지는 않습니다. 하지만 QRExt 확장 자체는 동작하려면 HTTP에 의존합니다. 현재는 Q가 이미 HTTP에 의존하므로 Q를 로드하면 HTTP를 사용할 수 있어 QRExt에서 임포트가 잘 됩니다.

문제는 이 구성이 우연이고 바뀔 수도 있다는 겁니다. 언젠가 Q가 HTTP 의존성을 2로 올릴 수 있습니다. 그러면 QRExt는 (1)을 기대하고 HTTP를 임포트했는데 HTTP 2를 받아서 깨지게 됩니다. “Q를 로드하면 HTTP를 사용할 수 있다”는 가정에서 근본 문제는 그 가정이 계속 성립하도록 명시적으로 강제하는 것이 없다는 겁니다.

어떻게 처리하면 좋을지 의견을 듣고 싶습니다.

영어에서 번역원문 보기

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    weakdep 메커니즘이 여기서 원하는 동작의 대부분을 제공할 것 같습니다. 다만 Q가 HTTP 2로 옮겨갈 때는 여전히 몇 가지 주의할 점이 있습니다. 그러면 HTTP 2를 쓰는 새로운 Q 버전을 QRExt가 해석할 수 있도록 R의 compat 항목을 갱신해야 합니다. 제 생각엔 그게 합리적이고 아마 의도한 결과 아닌가요?

    영어에서 번역원문 보기
  2. 고유 링크

    Q가 HTTP에 의존하지 않는다면, 지금의

    RQExt (저는 확장되는 패키지 이름을 먼저 쓰는 걸 좋아합니다)

    대신 RQHTTPExt를 만들 수 있습니다

    그러면 R의 주 프로젝트 파일에서 HTTP의 compat을 제한할 수 있습니다

    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. docker-compose 콘솔 출력 줄이기

    개발 환경에서 docker-compose up으로 모든 서비스를 시작하면 컨테이너 몇 개가 수백 줄씩 출력을 쏟아내요. 이 출력을 간편하게 걸러 낼 수 있을까요? 아니면 더 좋게는 docker-compose up이 실행되는…

    답글 3최근 활동 bash
  2. C 대신 D로 Python 확장 모듈을 만들 수 있을까요?

    D는 C와 링크할 수 있다고 하더군요. D로 Python 확장 모듈을 작성하고 싶어요. 제가 놓친 이유 때문에 이 방법이 아예 불가능한 건 아닐까요?

    답글 2최근 활동 d
  3. Micro 플러그인을 Nix에서 선언할 수 있나요?🤔

    python에서는 이렇게 쓸 수 있어요: Python.withPackages (q: with q; [ fastapi ]) Micro 에디터에도 같은 방식이 있나요? micro 에디터 패키지와 플러그인을 함께 지정할 수 있나요…

    답글 3최근 활동 nix