从源代码编译还是从.deb安装包安装,哪个更好呢?

有时候,当我从互联网上下载软件时,我发现有一个.deb包可以直接用于我的Debian/Ubuntu系统,还有一个需要编译的tarball。起初,为了安装方便,我会选择使用.deb包,甚至不敢尝试编译。光是听到编译这个词就让我有点害怕。然而,现在当我有选择的时候,有时候我会陷入两难境地:相比.deb包,从源代码编译是否有不太被人知晓的优势呢?我希望在这里找到答案,谢谢。
3个回答

编译源代码的优点是可以使用特定的标志/选项来编译软件包,这些标志/选项可能在标准的Ubuntu软件包中缺失/禁用。此外,它还可以轻松安装同一程序的多个版本。另外,您可以选择一个确切的软件包版本,该版本可能已从Ubuntu存储库中删除或尚未出现(例如:我在我的/opt/目录中有几个Python 2.4.x版本,因为我需要它来运行一些旧软件)。
从源代码编译的缺点是,除非您构建一个.deb文件并安装它,否则正常的"./configure; make; sudo make install"过程将使Ubuntu的软件包管理器完全不知道您所做的更改,因此您将无法获得手动编译软件的任何更新;而且如果您不小心将其安装在单独的位置,软件包管理器可能会在以后覆盖/破坏您的软件包。
简而言之:始终首先考虑从标准的Ubuntu存储库安装,然后考虑安装.deb文件;只有在确切知道为什么需要这样做时才从源代码编译。

我也读过,包的性能可能会有所不同,当它被编译时,与当前内核的兼容性可能更好。但我个人没有进行过基准测试。 - Fedir RYKHTIK
@Fedir:我不确定内核与此有任何关系,更多是处理器架构的问题。例如,在过去,许多发行版都包含使用80386指令集编译的软件包,以实现最大兼容性,而手动为Pentium编译程序则可以使其使用更高效的指令。有些发行版,比如Gentoo,出于这个原因会在主机上从源代码编译整个系统。然而,这种差异通常很小,只有在特定应用程序中才能注意到。 - Sergey
1请注意,使用checkinstall代替make install可以缓解很多提到的缺点。请参考https://help.ubuntu.com/community/CompilingEasyHowTo。 - ndemou
1抱歉挑剔一下,@EliahKagan,虚拟环境确实很棒,但它更适用于维护安装了不同库的多个Python环境。如果你想要一个特定版本的Python,可能还需要安装实际的二进制文件 - 要么从.deb文件中安装,要么从头开始编译。 - Sergey
@Sergey 你是对的。(而且我没有将你说的任何话视为挑剔 - 如果有什么问题,我应该为我的错误和误导性评论道歉!)据我了解,像conda这样的软件包管理器会自动为虚拟环境创建和安装不同版本的Python,并进行维护以满足每个项目的需求。但正如你所说的,virtualenv本身无法实现这一点。 - Eliah Kagan

我昨天刚在这个问题上争论过。我认为不建立任何脆弱的东西非常重要,因为众所周知,没有最新和良好的文档,特别是当你在处理一个脆弱的系统时,就没有时间去解决问题和编写文档了。而且,在一切都很稳定的情况下,文档也不是那么重要。所以你永远不应该从源代码编译,找到另一个解决方案,使用其他软件,改变你的架构,但不要使用会在更新后出现问题的东西。而且,这与内核版本无关,它与你的机器架构有关,在现今,通过编译源代码几乎不会带来显著差异,我敢打赌你不会得到任何好处。

安装.deb文件肯定更容易,但如果可以的话,最好是在软件仓库或ppa中找到它,这样可以提供更新。
据我所知,除非你打算先修改它,否则自己编译没有真正的好处。如果你只想使用原始软件,那就安装.deb文件。