라이브러리가 모든 프로그램과 함께 번들로 제공되는 대신 별도로 제공되는 이유는 무엇입니까?

라이브러리가 모든 프로그램과 함께 번들로 제공되는 대신 별도로 제공되는 이유는 무엇입니까?

나는 이것이 일반적으로 왜 좋은지 알고 있습니다. 더 빠른 보안 수정, 더 쉬운 패키징, 더 많은 기능입니다. 그러나 나는 일부 동료들에게 우리 프로그램과 함께 라이브러리를 번들로 묶을 필요가 없다는 점을 설득하려고 노력하고 있습니다. 이 라이브러리 없이는 작동하지 않지만 라이브러리는 한동안 안정적이었고 가까운 미래에도 안정적으로 유지될 것입니다. 나누지 않을 이유가 없다고 봅니다.

그들을 설득하기 위해 어떤 주장을 사용할 수 있습니까?


내 구체적인 상황은 다음과 같습니다. 노력 중입니다.상징, 기호 수학을 위한 오픈 소스 Python 라이브러리입니다. 핵심 부품 중 하나는수학, 다중 정밀도 부동 소수점 연산을 위한 라이브러리입니다. SymPy는 mpmath 없이는 작동하지 않으며 선택의 여지가 없습니다. 따라서 처음부터 SymPy와 함께 번들로 제공되었습니다(일반적으로 새 버전을 가져올 때마다 수정해야 하는 사소한 비호환성이 있다고 들었습니다). 또한 mpmath 개발자가 SymPy 개발에 참여했다는 점도 주목해야 합니다. 이제 mpmath 바인딩 해제에 대한 질문이 있습니다. 모두 읽을 수 있습니다.여기.

거기에서 논의를 요약하면 다음과 같습니다.

바인딩 해제:

  • Python 3으로 포팅하는 것이 더 쉽습니다(IMHO, 작은 인수)

  • 더욱 간편한 포장 배포

  • 사용자에게 더 빠른 (보안) 기능 업데이트 제공

  • "패키징 및 종속성 처리는 어려운 문제였지만 해결되었습니다. 확실히 우리가 직접 수행해야 하는 영역은 아닙니다."

계속 번들링:

  • 설치하다. Linux에서는 쉽고 Mac에서는 더 어렵고 Windows에서는 매우 어렵습니다. su 액세스 권한 부족과 같은 문제.

  • 이는 SymPy의 필수적인 부분입니다. 즉, SymPy는 SymPy 없이는 (전혀) 작동할 수 없습니다.

  • 가지다아니요mpmath 작업을 완료할 수 있는 기타 패키지

  • "사용자로서 Sympy를 다운로드할 때 작동하길 원합니다."


이것은 나의 특정한 상황이지만 훌륭하고 일반적인 답변을 제공하는 답변을 수락하겠습니다.

답변1

귀하가 언급한 장점(보안, 패키징, 기능) 외에도 다음과 같은 더 많은 장점이 있다고 생각됩니다.

  • 누군가가 다른 프로그램에서 그 기능이 유용하다고 생각한다면, 그 기능을 분리하는 작업을 수행할 필요가 없습니다. 즉, 해당 기능이 프로젝트에 라이브러리로 존재하는지 여부를 먼저 아는 경우입니다. 프로젝트가 충분히 모듈화되어 있는지 여부는 얼마나 잘 설계되었는지에 따라 다릅니다.

  • 이는 일반적으로 다른 프로젝트에 유용한 경우(예: 코드 사본 1개) 디스크 사용량의 크기를 줄입니다.

  • 이렇게 하면 코드 품질이 향상되고 일부(매우 필요한) 리팩토링을 수행해야 합니다. 위의 첫 번째 사항과 마찬가지로 이 역시 코드의 품질에 따라 달라집니다.

  • 라이브러리 사용자 수를 늘리면(분리된 경우) 라이브러리가 더욱 다양해지며 품질도 향상될 수 있습니다.

답변2

또 다른 답변이 있지만, 다른 답변도 모두 좋은 답변이지만 이것이 가장 중요한 답변이라고 생각합니다(개인 의견일 뿐입니다).

lib를 별도로 패키징하면 애플리케이션을 업데이트할 필요 없이 lib를 업데이트할 수 있습니다. 라이브러리에 버그가 있다고 가정하면, 라이브러리만 업데이트하는 것이 아니라 전체 애플리케이션을 업데이트해야 합니다. 이는 애플리케이션의 버전 업그레이드가 필요하지만 라이브러리 때문에 코드가 변경되지 않았음을 의미합니다.

답변3

장점은 분명하지만 배포 용이성은 귀하의 경우 프로그램과 함께 라이브러리를 출시하는 주요 주장인 것 같습니다.

번들링에 반대하는 몇 가지 추가 주장은 다음과 같습니다.

  • Linux에서는 라이브러리와 해당 종속성이 제대로 작동하는지 확인하는 것이 배포판 관리자의 임무입니다. 그럼에도 불구하고 대부분의 사용자는 배포판의 패키지 관리자를 사용하여 라이브러리를 다운로드합니다. 트렁크를 사용하는 사람들은 일반적으로 라이브러리를 구성하는 데 시간을 소비하는 것을 꺼리지 않습니다.

  • Windows 및 Mac OS에서는 라이브러리를 수동으로 설치하는 것이 번거롭기 때문에 pip와 같은 Python 패키지 관리자를 자주 사용합니다.

  • Google App Engine에 하드 배포하는 것에 대한 논쟁도 있지만 모든 웹 프레임워크가 Google App Engine에서 실행되는 것은 아닙니다. 많은 경우 이식이 필요하고 라이브러리에는 디스크 공간이 제한되어 있으며 이는 결국 웹 애플리케이션 호스팅입니다! 웹 애플리케이션은 기호 수학을 사용하지 않을 것입니다.

  • 종속성을 사용할 수 없거나 잘못된 버전인 경우 깨끗한 오류 메시지 표시를 막을 수 있는 사람은 아무도 없습니다.

  • 사람들은 프로그램이 자신보다 똑똑하다고 생각하는 것을 종종 싫어합니다. 사용자가 자신의 시스템을 관리하도록 하세요.

답변4

한 가지 크기가 반드시 모든 것에 적합하지는 않습니다.

소스 배포판의 경우 번들링을 수행하는 경우 많은 배포판(적어도 Debian 및 Fedora 레거시)의 패키저는 이러한 플랫폼의 패키지 정책이 번들링을 금지하거나 최소한 강력하게 방지하기 때문에 번들링을 비활성화하거나 제거하기 위한 추가 작업을 수행해야 합니다. 따라서 번들링을 사용하면 거의 이익이 되지 않지만 다운스트림에 더 많은 작업이 생성됩니다. 이 주장이 어느 정도 무게를 둘 수 있을까요?

바이너리 배포판(제공하는 경우)은 어느 방향으로든 갈 수 있습니다. 다운스트림으로 사용되지 않기 때문에 번들링이 적합할 수 있습니다.

하지만 반대로 Windows와 Mac 설치 프로그램 모두에 대한 번들을 제공하지 못할 이유는 없습니다.

관련 정보