2014-09-18 4 views
4

Я обнаружил, что установка родных пакетов Debian или Ubuntu Perl, таких как правило, более надежна и удобна, чем «вручную» установка модулей Perl через cpanm (особенно для XS-модулей). Есть ли простой способ найти эти модули с учетом списка требуемых модулей Perl? Самый удобный способ будет сопоставить cpanfile, такой, какКак найти (пакеты Debian/Ubuntu/...), которые предоставляют требуемые модули Perl

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 

PS: Я предполагаю, что информация может каким-то образом можно посмотреть из репозиториев пакетов каждого дистрибутива, например http://packages.ubuntu.com/ и https://packages.debian.org, но есть ли сценарийное решение, которое уже выполняет этот поиск?

+2

[Debian :: Кв :: PM] (https://metacpan.org/pod/Debian::Apt::PM) – Biffen

+0

@Biffen: внешность отлично, но, похоже, в плохом состоянии - до сих пор мне не удалось установить его. – Jakob

ответ

6

В системах 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

Простой. Просто выполните поиск по ключевому слову. Он перечислит все соответствующие пакеты. Затем вы можете установить тот, который вы хотите.

например. на мой убунту 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.

+0

Спасибо за отправную точку. Однако «совершенно очевидно» требует проверки человека, я до сих пор не знаю версию модуля, и мне нужно запускать ее на каждой версии Ubuntu. – Jakob

-5

Если вы хотите графический (и более комфортабельный) менеджер пакетов, вы можете попробовать использовать Synaptic

Для Ubuntu:

sudo apt-get install synaptic 
synaptic 

Наслаждайтесь

+3

Привет Паоло. Этот ответ не отвечает на мой вопрос, но дает очень общий совет, который может каким-то образом быть связан с моим вопросом. Пожалуйста, постарайтесь дать только точные ответы. – Jakob

1

Самый простой способ узнать, какой пакет предоставляет Модуль Perl:

dh-make-perl locate XML::LibXSLT 

Вам необходимо установить дк-макияж жемчужно пакет

0

Как ответ by Christian Pietsch и pau4o dh-make-perl могут найти пакеты Debian, которые включают данный модуль perl. Следующий сценарий извлекает все необходимые модули из cpanfile, передает их Dh-грим жемчужно и выводит соответствующий 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 
Смежные вопросы