我无法在任何地方找到这个问题的答案:通过 APT 安装的模块是否与通过 CPAN 安装的模块冲突?
除此之外,还有以下问题:已安装的 CPAN 模块位于何处?它们是全局可访问的还是仅供安装用户访问?您如何知道哪一个?您如何知道安装了什么以及哪个优先?
通过 APT 安装模块时是否应该使用 CPAN?
答案1
在 Debian 和 Ubuntu 上,CPAN(实用程序)默认/usr/bin/cpan
将模块安装到 中。Debian 软件包将其文件保存在和 中。因此,通过 安装的文件不会覆盖通过 apt 安装的文件。/usr/local/lib/
/usr/share/perl5/
/usr/lib/perl5/
/usr/bin/cpan
使用系统 perl 没有任何问题,混合 apt 和 cpan 代码通常会起作用。
您还可以选择手动打包 apt 存储库中没有的任何 cpan 发行版。借助 dh-make-perl 工具,这很容易:
dh-make-perl --cpan Some::Module && cd Some-Module* && sudo debi
答案2
我用perlbrew。它会安装 Perl 和 cpan 的本地版本。它所做的一切都在您的主目录中完成。它的安装和使用非常简单,您可以安装最新版本的 Perl。
答案3
当直接从 CPAN 安装时,我建议使用 local::lib 到你私有的目录。请参阅 bootstrapping 技术https://metacpan.org/module/local::lib
这样,CPAN 安装的模块将仅由您的用户使用,并且它将与使用 APT 安装的模块有非常干净的分离。
如果您遇到任何问题或升级 Ubuntu,它还可以让您轻松摆脱 CPAN 安装的模块。
这就是我在 Ubuntu 上使用它的方式。
答案4
您可以使用两者,但它们会发生冲突。它们被写到同一个位置,因此如果您从 apt 安装某个东西,然后从 cpan 安装更高版本,您可能会搞砸一切。
我很少使用 Perl,但在使用 Python 时,我肯定遇到了您所说的两难境地:apt-vs-PyPI。我个人尽可能选择 apt。这意味着我应该获得更新,而不必记住维护每个单独的 Python 包。不仅如此,这还意味着我的所有系统都应该运行这些包的相同版本。
这种方法并不总是奏效。有时你的仓库中没有足够的新东西,或者你需要的东西没有打包。这两种方法都不是完美的,但我相信可以做到更多的非常好。只要注意自己在做什么就没问题。
编辑- 差点忘了,还有一种更好的方法来划分事物,这样系统就可以拥有自己的环境,并且无论你开发什么都可以存在于自己的环境中(你完全用 CPAN 进行管理),就像 Python 的virtualenv
...