Benjamin Pollack Asked: 2010-07-30 05:22:22 +0800 CST2010-07-30 05:22:22 +0800 CST 2010-07-30 05:22:22 +0800 CST 何时在 aptitude 和 CPAN/Gems/PyPI 中使用包? 772 什么时候从官方.deb存储库安装一个包,什么时候用语言的包管理器安装的一般规则是什么?上游存储库中的那些通常至少稍微过时,但我也不希望我的包与“官方”的包发生冲突,而且似乎 aptitude 会迫使我安装官方无论如何,在很多情况下。 package-management gems 3 个回答 Voted Best Answer txwikinger 2010-07-30T05:34:41+08:002010-07-30T05:34:41+08:00 这是一个很难笼统地回答的问题。 官方 .deb 包为您提供稳定性和 Ubuntu 社区的全力支持。如果您不需要最新版本,则使用此解决方案可能会更好。您还拥有包管理器对更新、删除等的支持。 如果您需要来自上游的支持,或者需要最新的功能,您最好从 CPAN、gem、pear 等分发系统中获取它。 Alex Martelli 2010-07-31T06:56:06+08:002010-07-31T06:56:06+08:00 .deb在我(不可否认)经验中,特定于语言的包管理器在跟踪完全超出语言边界的依赖项方面做得不如那些做得好(我特别考虑对 C 编码的依赖项)包包装用于 Python、Perl、Ruby 等的库)。 如果(比如说)一个 Pypi Python 包'barfoo'需要一些库libfoobar来构建_bf.so包使用的 Python 扩展,并且libfoobar至少需要在 release 版本5.2,则由您决定哪些.deb提供合适的版本libfoobar(并且您可能找不到第一,如果 Pypi 软件包跟踪接近上游的最新和最好的)——并以某种方式跟踪它,以防您barfoo稍后卸载(因此libfoobar供应商被“孤立”并且可以/应该被删除)。 我认为将 Pypi/CPAN/etc 与其他包分发系统集成的问题还不能被认为是“解决”的问题。对于最小的管理麻烦,如果您可以与官员相处.deb(不需要最新和最好的feechurz&c),我认为这是可取的;当然,在另一个极端,对于您确实想要超级更新的包(例如,您是包的上游作者/维护者之一;-),可以选择在任何版本控制中保留新的 repo包使用的系统(svn,hg,git,bazaar,...)并保持它从源代码构建。Pypi/CPAN/&c 在“中间”。当然,有时这种中间方式也是可取的。 而且,可以考虑的一种选择是构建自己的.deb包(基于 Pypi/CPAN/&c 之一,甚至基于上游源)并保留此类包的存储库(对于那些您也可以找到官方存储库的.deb包贫穷或落后)。这并不比安装其他方式(手动跟踪语言外的依赖项)更麻烦,并且有助于识别“孤立包”等(另外,如果您发布您的包,您还可以帮助其他人;-)。 Marco Ceppi 2010-07-30T07:02:27+08:002010-07-30T07:02:27+08:00 我真的反对使用 Aptitude 来管理来自另一个包管理器的包。CPAN、Gems、Pecl、Pear 等是各自语言的包管理器。它们是你应该默认的——在我看来——因为这就是它们的设计目的。更不用说现在大多数都处理升级和更新(gem 更新、gem 升级等)。这就像使用 yum 在你的 Ubuntu 机器上安装 Apache。 话虽如此,在某些情况下,Aptitude 版本占据了至高无上的地位。其中之一是当从语言包管理器安装模块失败时(这通常是由于不同的配置问题)我很少遇到这个问题 - 但是当我从 Aptitude 执行相关包时就可以解决问题。 我认为语言包管理器> 能力的优先级。
这是一个很难笼统地回答的问题。
官方 .deb 包为您提供稳定性和 Ubuntu 社区的全力支持。如果您不需要最新版本,则使用此解决方案可能会更好。您还拥有包管理器对更新、删除等的支持。
如果您需要来自上游的支持,或者需要最新的功能,您最好从 CPAN、gem、pear 等分发系统中获取它。
.deb
在我(不可否认)经验中,特定于语言的包管理器在跟踪完全超出语言边界的依赖项方面做得不如那些做得好(我特别考虑对 C 编码的依赖项)包包装用于 Python、Perl、Ruby 等的库)。如果(比如说)一个 Pypi Python 包
'barfoo'
需要一些库libfoobar
来构建_bf.so
包使用的 Python 扩展,并且libfoobar
至少需要在 release 版本5.2
,则由您决定哪些.deb
提供合适的版本libfoobar
(并且您可能找不到第一,如果 Pypi 软件包跟踪接近上游的最新和最好的)——并以某种方式跟踪它,以防您barfoo
稍后卸载(因此libfoobar
供应商被“孤立”并且可以/应该被删除)。我认为将 Pypi/CPAN/etc 与其他包分发系统集成的问题还不能被认为是“解决”的问题。对于最小的管理麻烦,如果您可以与官员相处
.deb
(不需要最新和最好的feechurz&c),我认为这是可取的;当然,在另一个极端,对于您确实想要超级更新的包(例如,您是包的上游作者/维护者之一;-),可以选择在任何版本控制中保留新的 repo包使用的系统(svn,hg,git,bazaar,...)并保持它从源代码构建。Pypi/CPAN/&c 在“中间”。当然,有时这种中间方式也是可取的。而且,可以考虑的一种选择是构建自己的
.deb
包(基于 Pypi/CPAN/&c 之一,甚至基于上游源)并保留此类包的存储库(对于那些您也可以找到官方存储库的.deb
包贫穷或落后)。这并不比安装其他方式(手动跟踪语言外的依赖项)更麻烦,并且有助于识别“孤立包”等(另外,如果您发布您的包,您还可以帮助其他人;-)。我真的反对使用 Aptitude 来管理来自另一个包管理器的包。CPAN、Gems、Pecl、Pear 等是各自语言的包管理器。它们是你应该默认的——在我看来——因为这就是它们的设计目的。更不用说现在大多数都处理升级和更新(gem 更新、gem 升级等)。这就像使用 yum 在你的 Ubuntu 机器上安装 Apache。
话虽如此,在某些情况下,Aptitude 版本占据了至高无上的地位。其中之一是当从语言包管理器安装模块失败时(这通常是由于不同的配置问题)我很少遇到这个问题 - 但是当我从 Aptitude 执行相关包时就可以解决问题。
我认为语言包管理器> 能力的优先级。