有时候,当我从互联网上下载软件时,我发现有一个.deb包可以直接用于我的Debian/Ubuntu系统,还有一个需要编译的tarball。起初,为了安装方便,我会选择使用.deb包,甚至不敢尝试编译。光是听到编译这个词就让我有点害怕。然而,现在当我有选择的时候,有时候我会陷入两难境地:相比.deb包,从源代码编译是否有不太被人知晓的优势呢?我希望在这里找到答案,谢谢。
编译源代码的优点是可以使用特定的标志/选项来编译软件包,这些标志/选项可能在标准的Ubuntu软件包中缺失/禁用。此外,它还可以轻松安装同一程序的多个版本。另外,您可以选择一个确切的软件包版本,该版本可能已从Ubuntu存储库中删除或尚未出现(例如:我在我的/opt/目录中有几个Python 2.4.x版本,因为我需要它来运行一些旧软件)。从源代码编译的缺点是,除非您构建一个.deb文件并安装它,否则正常的"./configure; make; sudo make install"过程将使Ubuntu的软件包管理器完全不知道您所做的更改,因此您将无法获得手动编译软件的任何更新;而且如果您不小心将其安装在单独的位置,软件包管理器可能会在以后覆盖/破坏您的软件包。简而言之:始终首先考虑从标准的Ubuntu存储库安装,然后考虑安装.deb文件;只有在确切知道为什么需要这样做时才从源代码编译。
我昨天刚在这个问题上争论过。我认为不建立任何脆弱的东西非常重要,因为众所周知,没有最新和良好的文档,特别是当你在处理一个脆弱的系统时,就没有时间去解决问题和编写文档了。而且,在一切都很稳定的情况下,文档也不是那么重要。所以你永远不应该从源代码编译,找到另一个解决方案,使用其他软件,改变你的架构,但不要使用会在更新后出现问题的东西。而且,这与内核版本无关,它与你的机器架构有关,在现今,通过编译源代码几乎不会带来显著差异,我敢打赌你不会得到任何好处。
conda
这样的软件包管理器会自动为虚拟环境创建和安装不同版本的Python,并进行维护以满足每个项目的需求。但正如你所说的,virtualenv本身无法实现这一点。 - Eliah Kagan