我发现安装本机 Debian 或 Ubuntu Perl 软件包通常比通过
cpanm
(尤其是 XS-Modules)“手动”安装 Perl 模块更可靠和方便。给定所需的 Perl 模块列表,是否有一种简单的方法可以找到这些模块?最方便的方法是映射一个cpanfile,例如
requires 'XML::LibXSLT', '1.78';
为不同目标平台提供模块的发行版和软件包列表:
XML::LibXSLT, Ubuntu 13.04, libxml-libxslt-perl, 1.78
XML::LibXSLT, Ubuntu 13.10, libxml-libxslt-perl, 1.78
XML::LibXSLT, Ubuntu 14.04, libxml-libxslt-perl, 1.84
XML::LibXSLT, Debian squeeze, libxml-libxslt-perl, 1.70
XML::LibXSLT, Debian wheezy, libxml-libxslt-perl, 1.77
XML::LibXSLT, Debian jessie, libxml-libxslt-perl, 1.92
XML::LibXSLT, Debian sid, libxml-libxslt-perl, 1.92
P.S.:我想可以从每个发行版的包存储库中以某种方式查找信息,例如http://packages.ubuntu.com/ 和 https://packages.debian.org 但是是否有一个脚本化的解决方案已经完成了这个查找?
在基于 Debian 的系统上,安装
dh-make-perl
包并尝试
dh-make-perl locate XML::LibXSLT
在我的 LMDE 盒子上,它输出:
== dh-make-perl 0.80 ==
Using cached Contents from Thu Sep 18 13:23:19 2014
XML::LibXSLT is in libxml-libxslt-perl package
要将此包名称映射到其他 Linux 发行版,您可以使用 distromatch。它似乎也支持
Perl
(CPAN
) 和 Python
包名称。不幸的是,distromatch
似乎没有维护,现在不能开箱即用。最近我确实设法让它工作得很好,可以将 Debian 翻译成 openSUSE 包名。
简单。只需搜索关键字即可。它将列出所有相关的包。然后你可以安装你想要的那个。
例如在我的 ubuntu 12.04 上,我搜索了
LibXSLT
:
$ aptitude search LibXSLT
p libxml-libxslt-perl - Perl interface to the GNOME libxslt library
v libxslt-dev -
p libxslt1-dbg - XSLT 1.0 processing library - debugging symbols
p libxslt1-dev - XSLT 1.0 processing library - development kit
i A libxslt1.1 - XSLT 1.0 processing library - runtime library
p libxsltc-java - XSL Transformations (XSLT) compiler from Xalan-Java
p libxslthl-java - XSLT syntax highlighting
p python-libxslt1 - Python bindings for libxslt1
p python-libxslt1-dbg - Python bindings for libxslt1 (debug extension)
v python2.7-libxslt1 -
v python2.7-libxslt1-dbg -
所以,如上所述,很明显你想安装
libxml-libxslt-perl
.
找到哪个包提供 Perl 模块的最简单方法是:
dh-make-perl locate XML::LibXSLT
需要安装dh-make-perl包
正如 Christian Pietsch 的回答 和 pau4o
dh-make-perl
可以找到包含给定 perl 模块的 Debian 软件包。以下脚本从 cpanfile 中提取所有必需的模块,将它们传递给 dh-make-perl 并打印相应的 Debian 包:
#!/usr/bin/perl
# read perl modules as arguments or from ./cpanfile
use Module::CPANfile;
my @modules = @ARGV ? @ARGV : do {
my $prereqs = Module::CPANfile->load->prereq_specs;
keys %{$prereqs->{runtime}->{requires}};
};
# locate Debian packages that include these modules
exit 1 unless @modules;
my $cmd = join ' ', 'dh-make-perl', 'locate', @modules, '2>/dev/null';
open my $fh, "-|", $cmd;
foreach (<$fh>) {
# this ignore core packages
# see DhMakePerl::Command::locate for details
print "$1\t$2\n" if /(.+) is in (.+) package/;
}
我用它作为
perldebs
首先将 Perl 模块安装为 Debian 模块,然后只从 CPAN 获取其余部分。该解决方案尚未考虑版本号:
$ sudo apt-get install `perldebs | awk '{print$2}'`
$ sudo cpanm --installdeps . --skip-satisfied
XML::LibXSLT
是 XML-LibXSLT
发行版的一部分,因此 Debian/Ubuntu/... 包被命名为 libxml-libxslt-perl
.[1]
您可以通过访问模块的 CPAN 页面(第一个链接)找到发行版名称 (
XML-LibXSLT
)。它在最上面,在作者的名字之后。
您也可以寻找提供
XML/LibXSLT.pm
的包裹。[2]
apt-file search XML/LibXSLT.pm
"lib" . lc( $distro ) . "-perl"
获得。( $module =~ s{::}{/}gr ) . ".pm"
获得。如果你想要一个图形化的(更舒适的)包管理器,你可以尝试使用 synaptic
对于 Ubuntu:
sudo apt-get install synaptic
synaptic
享受