【问题标题】:How to find (Debian/Ubuntu/...) packages that provide required Perl modules如何找到提供所需 Perl 模块的 (Debian/Ubuntu/...) 软件包
【发布时间】:2014-11-12 09:42:04
【问题描述】:

我发现安装本机 Debian 或 Ubuntu Perl 软件包通常比通过cpanm“手动”安装 Perl 模块更可靠和方便(尤其是对于 XS 模块)。给定所需的 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 但是是否有一个脚本化的解决方案已经进行了这种查找?

【问题讨论】:

  • @Biffen:看起来不错,但似乎状态不佳 - 到目前为止,我还没有成功安装它。

标签: perl debian package-managers


【解决方案1】:

在基于 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 包名称。

【讨论】:

    【解决方案2】:

    简单。只需使用关键字搜索即可。它将列出所有相关的包。然后你就可以安装你想要的了。

    例如在我的 ubuntu 12.04 上,我搜索了 LibXSLT:

    $ sudo 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。

    【讨论】:

    • 感谢您的起点。然而,“相当明显”需要人工检查,我仍然不知道模块版本,我需要在每个版本的 Ubuntu 上运行它。
    【解决方案3】:

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

    dh-make-perl locate XML::LibXSLT
    

    你需要安装dh-make-perl包

    【讨论】:

      【解决方案4】:

      by 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
      

      【讨论】:

        【解决方案5】:

        如果你想要一个图形化(更舒适)的包管理器,你可以尝试使用 synaptic

        对于 Ubuntu:

        sudo apt-get install synaptic
        synaptic
        

        享受

        【讨论】:

        • 嗨,保罗。这个答案没有回答我的问题,但给出了一个非常笼统的建议,可能与我的问题有关。请尽量只给出准确的答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-08
        • 2012-08-21
        • 2023-03-04
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多