如何找到(Debian/Ubuntu/...)提供所需Perl模块的软件包

62lalag4  于 2023-05-18  发布在  Perl
关注(0)|答案(5)|浏览(236)

我发现安装本地Debian或Ubuntu Perl软件包通常比通过cpanm“手动”安装Perl模块(特别是对于XS模块)更可靠和方便。有没有一个简单的方法来找到这些模块给出了所需的Perl模块列表?最方便的方法是Mapcpanfile,例如

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,但是否有一个脚本解决方案已经这样做查找?

i2byvkas

i2byvkas1#

在基于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

要将这个包名Map到其他Linux发行版,可以使用distromatch。它似乎还支持PerlCPAN)和Python包名。不幸的是,distromatch似乎没有维护,现在不能开箱即用。最近,我确实设法使它工作得足够好,将Debian翻译成openSUSE包名。

3pvhb19x

3pvhb19x2#

很简单。只要用关键词搜索。它将列出所有相关的软件包。然后你可以安装你想要的。
例如,在我的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

cetgtptt

cetgtptt3#

查找哪个包提供Perl模块的最简单方法是:

dh-make-perl locate XML::LibXSLT

需要安装dh-make-perl

9njqaruj

9njqaruj4#

正如所回答的,by Christian Pietsch和pau 4 o 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
8qgya5xd

8qgya5xd5#

Debian/Ubuntu/...包是从Perl发行版的名称派生出来的。
XML::LibXSLTXML-LibXSLT分布的一部分。您可以通过访问模块的CPAN页面找到发行版名称(XML-LibXSLT)(第一个链接)。在最上面,在作者名字后面。
为了获得Debian/Ubuntu/...软件包名称,小写Perl发行版名称,前缀为lib,后缀为-perl
或者,你也可以寻找提供XML/LibXSLT.pm的包。[2]一种方法:

apt-file search XML/LibXSLT.pm

1.使用"lib" . lc( $distro ) . "-perl"获得。
1.使用( $module =~ s{::}{/}gr ) . ".pm"获得。

相关问题