Python 패키지를 개발할 때 동일한 종속성의 다른 버전이 필요한 경우 사용자에게 종속성 충돌이 발생할 수 있습니다. 예를 들어 패키지에 요청==2.26.0이 필요하지만 사용자 시스템에 요청==2.25.1이 필요한 경우 Python에서는 동일한 패키지의 여러 버전을 동시에 설치할 수 없으므로 둘 다 공존할 수 없습니다.
종속성 충돌을 방지하기 위한 접근 방식:
A. 공급업체 접근 방식:
-
공급업체 종속성: 여기에는 필요한 종속성을 패키지에 직접 포함하는 작업이 포함됩니다. 버전을 제어하는 데 유용하지만 패키지 크기가 커질 수 있습니다.
-
순수 Python 패키지: 벤더링은 자체 종속성이 없는 순수 Python 패키지에 적합합니다.
-
종속성이 있는 패키지: 공급업체 패키지에 자체 종속성이 있으면 공급업체에 문제가 발생하여 충돌이 발생할 수 있습니다.
문제:
-
종속성 충돌: 종속성이 있는 패키지를 공급하면 사용자 환경에서 충돌이 발생할 수 있습니다.
-
버전 제어: 공급업체 종속성을 최신 상태로 유지하는 것은 보안에 매우 중요합니다.
-
크기: 공급업체가 패키지 크기를 늘릴 수 있습니다.
예:
-
시나리오 1: 요청에 종속성이 없는 경우 이를 패키지와 함께 번들링하면 올바른 버전이 사용됩니다.
-
시나리오 2: 요청은 urllib3과 같은 라이브러리에 의존하므로 다른 패키지에 다른 버전의 urllib3이 필요한 경우 충돌이 발생할 수 있습니다.
참고: 판매를 하는 경우 판매 정책을 준수해야 합니다. 여기에서 확인하세요.
B. 가상 환경 접근 방식:
- 종속성 충돌은 통제할 수 없는 경우가 많습니다. 특히 타사 앱에서는 가상 환경을 사용하는 경우에도 마찬가지입니다.
문제:
-
우리 통제할 수 없음: 사용자가 가상 환경을 설정하는 방법은 우리의 영향력을 벗어납니다.
-
타사 앱: 가상 환경에서도 여전히 충돌 문제가 발생할 수 있습니다.
C. 포크 접근:
- 충돌하는 패키지를 포크하고 이름을 바꾸고(예: mypackage-requests==2.26.0) 패키지에서 포크된 버전을 사용할 수 있습니다.
문제:
-
유지관리: 포크를 사용하려면 포크를 원래 패키지로 업데이트해야 합니다.
-
하위 종속성: 포크된 패키지에 종속성이 있는 경우 해당 패키지도 포크하고 관리해야 할 수 있습니다.
결론:
각 접근 방식에는 장점과 과제가 있으며, 선택은 특정 사용 사례와 종속성에 대해 원하는 제어 수준에 따라 달라집니다. 경험상, 패키지를 적절하게 유지하고 더 넓은 Python 생태계와의 호환성을 보장하여 충돌을 해결하는 것이 더 좋습니다.
자원:
- requirements.txt에서 충돌하는 패키지를 어떻게 관리하나요?
- 판매 정책
- 파이썬 벤더화
- 벤더 패키지에 대해 어떻게 생각하시나요?
위 내용은 Python 패키지 충돌의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!