CPAN与APT:版本冲突?


9

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

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

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

Answers:


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

cpan已安装模块的最终安装位置由PERL确定Config.pm。在我的Ubuntu 11.04上,它是/usr/local/share/perl/5.10.1
里卡多·穆里

我认为这是/usr/local/share针对纯perl模块和/usr/local/libxs的东西。
berekuk 2011年

6

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


2
如果您想脱离系统perl,那也很好。
szabgab 2011年

4

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

这样,CPAN安装的模块将仅由您的用户使用,并且与使用APT安装的模块有非常清晰的区分。

如果遇到任何问题或升级Ubuntu时,它也将使摆脱CPAN安装的模块变得容易。

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


1

您可以同时使用它们,但是它们会冲突。它们被写到同一位置,因此,如果您从apt安装某些东西,然后从cpan安装更高版本,则可能会使事情变得困难。

我并没有做太多的Perl,但是在Python中我确实遇到了您正在谈论的难题:apt-vs-PyPI。只要有可能,我都会亲自选择合适的方式。这意味着我应该获得更新,而不必记住要维护每个单独的Python包。不仅如此,这还意味着我所有的系统都应在这些软件包的相同版本上运行。

它并不总是可行。有时您在回购协议中没有足够新的东西,或者只是没有打包您需要的东西。两种方法都不完美,但我相信会完美。只要知道自己在做什么,就应该可以了。


编辑 -几乎忘记了,有一种更好的方法可以将内容分段,以便系统可以拥有自己的环境,而无论您开发什么内容,都可以在自己的环境中(完全由CPAN管理),就像Python一样virtualenv

/programming/1423879/how-can-i-install-specialized-environments-for-different-perl-applications


我希望CPAN可以安装到某些目录Sitesite目录中-或者至少可以强制使用它。

3
注意:在Ubuntu上,cpan-installed的模块最终位于/ usr / local / share / perl(或PERL的指定位置Config.pm),而根据Debian策略,APT软件包最终位于/ usr / share / perl5。因此,它们不会冲突,并且可以安全地混合和匹配CPAN和APT安装,如其他答案所述。(这里的Python不是一个很好的类比:PERL的打包和模块处理有很多不同,并且-IMHO-优于Python。)
Riccardo Murri

@Riccardo:非常正确。Red Hat也是如此,尽管它位于不同的位置。
梅,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.