CPAN 与 APT:版本冲突?

Mei*_*Mei 9 apt perl cpan

我在任何地方都找不到答案:通过 APT 安装的模块是否与通过 CPAN 安装的模块冲突?

伴随这个问题的还有这些:安装的 CPAN 模块在哪里?它们是全局访问还是仅安装用户可以访问?你怎么知道是哪一个?你怎么知道安装了什么,哪个优先?

通过 APT 安装模块时是否应该使用 CPAN?

小智 8

在 Debian 和 Ubuntu CPAN(/usr/bin/cpan实用程序)/usr/local/lib/默认安装模块。并且 debian 软件包将它们的文件保存在/usr/share/perl5//usr/lib/perl5/. 因此,通过安装的/usr/bin/cpan文件不会覆盖通过 apt 安装的文件。

使用系统 perl 没有错,混合 apt 和 cpan 代码通常会起作用。

您还可以选择手动打包 apt 存储库中不可用的任何 cpan 发行版。在 dh-make-perl 工具的帮助下很容易:

dh-make-perl --cpan Some::Module && cd Some-Module* && sudo debi
Run Code Online (Sandbox Code Playgroud)


小智 6

我使用perlbrew。它安装本地版本的 Perl 和 cpan。它所做的一切都在您的主目录中完成。安装和使用非常简单,您可以安装最新版本的 Perl。

  • 如果你想脱离系统 perl,那也很好。 (2认同)

sza*_*gab 4

直接从 CPAN 安装时,我建议使用 local::lib 到您私有的目录。请参阅 boostrapping 技术https://metacpan.org/module/local::lib

这样,CPAN 安装的模块将仅由您的用户使用,并且它将与使用 APT 安装的模块完全分离。

如果您遇到任何问题或升级 Ubuntu 时,它还可以让您轻松删除 CPAN 安装的模块。

这就是我在 Ubuntu 上使用它的方式。


Oli*_*Oli 1

您可以同时使用两者,但它们会发生冲突。它们被写入同一个位置,因此如果您从 apt 安装某些内容,然后从 cpan 安装更高版本,则可能会出现问题。

我对 Perl 的了解不多,但在 Python 中我确实遇到了你所说的困境:apt-vs-PyPI。我个人尽可能选择 apt。这意味着我应该获得更新,而不必记住维护每个单独的 Python 包。不仅如此,这还意味着我的所有系统都应该在这些软件包的相同版本上运行。

它并不总是有效。有时,您的存储库中没有足够新的东西,或者您需要的东西没有打包。这两种方式都不是完美的,但我相信会更加完美。只要意识到你在做什么就应该没问题。


编辑- 几乎忘记了,有一种更好的方法来划分事物,这样系统就可以拥有自己的环境,并且您正在开发的任何内容都可以存在于自己的环境中(您完全使用 CPAN 进行管理),就像 Python 的virtualenv...

/sf/ask/99671561/ Different-perl-applications

  • 注意:在 Ubuntu 上,“cpan”安装的模块最终位于 /usr/local/share/perl(或 PERL 的“Config.pm”指定的位置)中,而 APT 包最终位于 /usr/share/perl5 中Debian 政策。所以它们*不*冲突,并且混合和匹配 CPAN 和 APT 安装是安全的,正如其他答案所说。(Python 在这里不是一个很好的类比:PERL 打包和模块处理有很大不同,并且 - 恕我直言 - 优于 Python。) (3认同)