为什么图书馆要单独运送而不是与每个程序捆绑在一起?


10

我知道总体上为什么如此好:更快的安全修复,更轻松的包装,更多功能。但是,我试图说服一些同事我们不需要将库与程序捆绑在一起。没有该库,它将无法正常工作,但是该库已经稳定了一段时间,并且在可预见的将来仍将保持稳定。我认为没有任何理由不将其拆开。

我可以用什么论据来说服他们?


我的具体情况是:我正在研究SymPy,这是一个用于符号数学的开源Python库。它的核心部分是mpmath,它是用于多预置浮点运算的库。如果没有mpmath,SymPy将无法运行,没有其他选择。因此,它从一开始就与SymPy捆绑在一起(有人告诉我,每次导入新版本时通常都存在一些小的不兼容问题来修复)。还应注意,mpmath的开发人员曾经参与过SymPy开发。现在有一个关于捆绑mpmath的问题,您可以在这里阅读全部内容。

总结那里的讨论:

解除捆绑:

  • 移植到Python 3稍微容易一些(次要参数IMHO)

  • 包装更容易分发

  • 向用户更快(安全)功能更新

  • “打包和处理依赖关系是棘手的问题,但可以解决。绝对不是我们应该做自己的事情的领域。”

继续捆绑:

  • 安装。在Linux上很容易,在Mac上更难,在Windows上非常难。缺少su访问权限和其他问题。

  • 它是SymPy不可或缺的一部分,即没有它,sympy根本无法工作(根本)

  • 没有其它的包,可以做mpmath的工作

  • “当我作为用户下载sympy时,我希望它能正常工作。”


那是我的具体情况,但我会接受一个提供一般性好的答案的答案。


您需要根据具体情况提供更多信息,以获得更好的答案。例如,您打算运行什么环境?它会暴露在互联网上吗?
tshepang 2011年

您的应用程序是开源的吗?
2011年

@Anton是的,它是SymPy,一个用于符号数学的开源Python库。我正在以GSoC学生的身份从事此工作(全面披露:))。
VPeric 2011年

@Tshepang可以在以下位置查看讨论内容:code.google.com/p/sympy/issues/detail?
id=2482

@VPeric:总结一下讨论会更好,只是为那些愿意回答您问题的人节省时间。
tshepang 2011年

Answers:


5

还有另一个答案,但我认为是最重要的(只是我个人的看法),尽管其他答案也都是不错的答案。

单独打包lib可允许更新lib,而无需更新应用程序。假设库中存在一个错误,而不仅仅是能够更新该库,则必须更新整个应用程序。这意味着您的应用程序由于lib的原因,甚至需要更改版本代码,而无需更改其代码。


1
这是很重要的一点,也是为什么许多发行版不喜欢将库与程序捆绑在一起的原因之一。例如,Debian的策略是不将库与可执行文件捆绑在一起或静态链接库,除非该库只能由该特定程序使用(或者对于静态链接而言,不支持动态链接的情况)。
吉尔(Gilles)'所以

最后,这也许是最重要的一点。我也同意其他答案,但是我只能选择一个。:)
VPeric 2011年

6

除了您提到的优势(安全性,包装,功能)之外,我还能想到其他一些优势:

  • 会发现该功能对另一个程序有用的人无需进行将其拆分的工作。那就是说,她甚至不知道该功能是否首先以库的形式存在于您的项目中。这取决于设计的好坏...如果您的项目足够模块化。

  • 如果这对于其他项目有用,则通常可以减少光盘使用量(例如,仅复制一份代码)。

  • 这将提高代码的质量,迫使您进行一些(非常需要的)重构。与上面的第一点一样,这也取决于代码的质量。

  • 增加图书馆用户的数量(如果图书馆被拆分)将有助于使其更通用,这也可能会改善图书馆的质量。


1
所有的优点。我想它可以理解为“面向未来”:您的积分目前很少适用(mpmath目前仅在其他几个项目中使用),但是很容易看到您的每个积分都为每个新项目带来价值使用mpmath。
VPeric 2011年

4

尽管优势显而易见,但易于部署似乎是将库与程序一起交付的主要理由。

这里还有一些反对捆绑的论点:

  • 在Linux中,分发维护者的工作是确保您的库与其依赖项一起正常工作。无论如何,大多数用户将使用发行版的程序包管理器下载该库。那些使用中继的人通常不会介意花费时间来配置库。

  • 在Windows和Mac OS中,无论如何通常都会使用pip之类的Python包管理器,因为手动安装库很麻烦。

  • 甚至有关于硬部署到Google应用程序引擎的争论,但并非所有Web框架都在其上运行。许多甚至需要移植,库的磁盘空间有限,而且毕竟是Web应用程序托管!Web应用程序不太可能使用符号数学。

  • 如果依赖项不可用或版本不正确,没有人会阻止您显示干净的错误消息。

  • 当程序认为自己比自己聪明时,人们通常会讨厌它。让用户照顾自己的系统。


你能解释一下最后一点吗?我不能说这是否是针对/反对捆绑的论据。
tshepang 2011年

3
我知道这与捆绑无关-用户想要安装他们想要的东西,而不是让我在他们身上强加特定版本。
VPeric 2011年

3

处理Windows Installer软件包中未捆绑销售商品的正确方法是对库的存在进行preinst测试,如果不存在,则建议从软件安装程序包中包含的库软件包中进行安装。我敢肯定,大多数具有Windows端口的GTK应用程序都遵循这些原则-我知道pidgin可以。


3

一种尺寸不一定适合所有尺寸。

对于源代码发行版,如果进行捆绑,则许多发行版(至少是Debian和Fedora遗产)上的打包程序将不得不做更多的工作来禁用或删除捆绑,因为这些平台的打包策略禁止或至少不鼓励捆绑。因此,通过捆绑,您将为下游创建更多的工作,而几乎没有收益。这个论点可能有分量吗?

二进制发行版(如果您提供的话)可以任意选择。捆绑对于这些可能很有意义,因为下游不使用它们。

但是没有理由不能对Windows和Mac安装程序做出相反的决定和捆绑。


1
我大体上同意,但这确实造成了额外的负担(但是很小),这意味着可能没人会支持这种解决方案。
VPeric 2011年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.