Qual é a maneira mais fácil de instalar um módulo Perl ausente?

192

Eu recebo este erro:

Can't locate Foo.pm in @INC

Existe uma maneira mais fácil de instalá-lo do que baixar, descompactar, criar etc.?

dreeves
fonte
1
Se o módulo em questão for um módulo principal, consulte Como corrigir "Não é possível localizar o Archive / Tar.pm" .
Ikegami
Tenha muito cuidado com a segurança: o que é necessário para garantir que os módulos não foram modificados deve ser baixado de forma segura a partir de um site confiável. Veja minha resposta sobre o uso de cpan.
vinc17

Respostas:

226

No Unix :

Normalmente você inicia o cpan no seu shell:

# cpan

e tipo

install Chocolate::Belgian

ou em forma abreviada:

cpan Chocolate::Belgian

No Windows :

Se você estiver usando o ActivePerl no Windows, o PPM (Perl Package Manager) possui praticamente a mesma funcionalidade do CPAN.pm.

Exemplo:

# ppm
ppm> search net-smtp
ppm> install Net-SMTP-Multipart

consulte Como instalo os módulos Perl? nas perguntas frequentes do CPAN

Muitas distribuições entregam muitos módulos perl como pacotes.

  • Debian / Ubuntu: apt-cache search 'perl$'
  • Arch Linux: pacman -Ss '^perl-'
  • Gentoo: categoria dev-perl

Você sempre deve preferi-los, pois se beneficia das atualizações automáticas (de segurança) e da facilidade de remoção . Isso pode ser bastante complicado com a própria ferramenta cpan .

Para o Gentoo, existe uma boa ferramenta chamada g-cpan que constrói / instala o módulo a partir do CPAN e cria um pacote Gentoo ( ebuild ) para você.

Benedikt Waldvogel
fonte
14
A forma curta é apenas "cpan Chocolate :: belga" na linha de comando :)
Brian D Foy
3
O IIRC, o ActivePerl mais recente, não possui mais ppm de linha de comando, agora abre uma GUI sofisticada.
Kev
6
Apenas "ppm" abre a GUI, mas seguido pelos comandos, ele permanece na linha de comando. Assim, "ppm ajuda", "ppm instalar ...", etc.
Bill Ruppert
Observe que o ppm usa traços no separador de caminho do módulo, e não nos dois pontos comuns. (Talvez porque dois pontos signifiquem unidades em dos?) Isso me pegou algumas vezes;)
Matthew Bloqueio
3
@ MatthewLock: ppmusa hífens -porque você especifica a distribuição que deseja instalar, o que é muito mais honesto. Por exemplo, se você usa cpana instalação LWP, LWP::Simpleou LWP::UserAgentela instalará a distribuição libwww-perlpara você. A maioria das distribuições contém um único módulo com um nome equivalente, mas existem várias exceções como essa
Borodin
65

Experimente o App :: cpanminus :

# cpanm Chocolate::Belgian

É ótimo apenas para instalar coisas. Ele não fornece nenhuma das funcionalidades mais complexas do CPAN ou CPANPLUS, por isso é fácil de usar, desde que você saiba qual módulo deseja instalar. Se você ainda não possui o cpanminus, digite:

# cpan App::cpanminus

para instalá-lo.

Também é possível instalá-lo sem usar o cpan. O procedimento básico de inicialização é,

curl -L http://cpanmin.us | perl - --sudo App::cpanminus

Para mais informações, acesse a página App :: cpanminus e consulte a seção sobre instalação.

Philip Potter
fonte
7
Usar cpanpara instalar App::cpanminusé um pouco estranho. As instruções normais de instalação envolvem um procedimento de inicialização para baixar uma parte do cpanmin.us e usá-lo para instalar o restante. Isso evita a configuração cpane a criação de um .cpandiretório (posteriormente) inútil .
Chas. Owens
No Ubuntu, você pode simplesmente instalar a cpanminuspartir do terminal. Acho cpanmmelhor do que cpanporque ele não coloca os logs de erros na tela, mas os armazena em arquivos de log temporários e fornece o caminho em caso de erros.
User13107
Estou recebendo este erro ao tentar o seu comando: Não é possível localizar strict.pm em @INC (pode ser necessário instalar o módulo estrito) (@INC contém: / etc / perl
IgorGanapolsky
29

Observo algumas pessoas sugerindo uma execução cpan no sudo. Isso costumava ser necessário para instalar no diretório do sistema, mas as versões modernas do shell do CPAN permitem que você o configure para usar o sudo apenas para instalação. Isso é muito mais seguro, pois significa que os testes não são executados como raiz.

Se você possui um shell CPAN antigo, basta instalar o novo cpan ("install CPAN") e, quando recarregar o shell, ele deverá solicitar que você configure essas novas diretivas.

Atualmente, quando estou em um sistema com um CPAN antigo, a primeira coisa que faço é atualizar o shell e configurá-lo para fazer isso para que eu possa fazer a maior parte do meu trabalho cpan como um usuário normal.

Além disso, eu sugiro fortemente que os usuários do Windows investiguem o Perl de morango . Esta é uma versão do Perl que vem com um shell de CPAN pré-configurado, além de um compilador. Ele também inclui alguns módulos Perl difíceis de compilar com suas dependências externas da biblioteca C, principalmente XML :: Parser. Isso significa que você pode fazer o mesmo que qualquer outro usuário do Perl quando se trata de instalar módulos, e as coisas tendem a "simplesmente funcionar" com muito mais frequência.

Dave Rolsky
fonte
1
install CPANde onde? $sudo apt-get install cpan?
Isomorphismes
1
@Lao Tzu: não, pois o CPAN é o módulo principal do Perl e não está disponível como pacote DEB separado. Eu acho que na maioria das situações é ainda melhor usar App::cpanminus, é uma alegria usá-lo. Philip Potter sugere isso em sua resposta aqui e você pode tentar este Chas. Owens responde .
semana
25

Se você está no Ubuntu e deseja instalar o módulo perl pré-empacotado (por exemplo, geo :: ipfree), tente o seguinte:

    $ apt-cache search perl geo :: ipfree
    libgeo-ipfree-perl - Um país de consulta do módulo Perl do endereço IP

    $ sudo apt-get install libgeo-ipfree-perl
Otto
fonte
Isso é ótimo. Obrigado.
Ivan X
16

Algumas pessoas mencionaram o utilitário cpan, mas é mais do que apenas iniciar um shell. Basta fornecer os módulos que você deseja instalar e deixar que funcione.

$prompt> cpan Foo::Bar

Se você não fornecer argumentos, ele iniciará o shell CPAN.pm. Isso funciona no Unix, Mac e deve funcionar bem no Windows (especialmente no Strawberry Perl).

Existem várias outras coisas que você pode fazer com a ferramenta cpan também. Aqui está um resumo dos recursos atuais (que podem ser mais novos que o fornecido com o CPAN.pm e o perl):

-a
Creates the CPAN.pm autobundle with CPAN::Shell->autobundle.

-A module [ module ... ]
Shows the primary maintainers for the specified modules

-C module [ module ... ]
Show the Changes files for the specified modules

-D module [ module ... ]
Show the module details. This prints one line for each out-of-date module (meaning,
modules locally installed but have newer versions on CPAN). Each line has three columns:
module name, local version, and CPAN version.

-L author [ author ... ]
List the modules by the specified authors.

-h
Prints a help message.

-O
Show the out-of-date modules.

-r
Recompiles dynamically loaded modules with CPAN::Shell->recompile.

-v
Print the script version and CPAN.pm version.
brian d foy
fonte
11

sudo perl -MCPAN -e 'install Foo'

dreeves
fonte
Brilliant, isso funcionou para mim agora no Windows com Git perl, mas eu tive que instalar GNUWin make primeiro
wytten
8

Otto fez uma boa sugestão . Isso funciona para o Debian também, assim como qualquer outro derivado do Debian. A parte que falta é o que fazer quando a pesquisa do apt-cache não encontrar algo.

$ sudo apt-get install dh-make-perl build-essential apt-file
$ sudo apt-file update

Então, sempre que você tiver um módulo aleatório, você deseja instalar:

$ cd ~/some/path
$ dh-make-perl --build --cpan Some::Random::Module
$ sudo dpkg -i libsome-random-module-perl-0.01-1_i386.deb

Isso lhe dará um pacote deb que você pode instalar para obter o Some :: Random :: Module. Um dos grandes benefícios aqui são as páginas de manual e os scripts de amostra, além do próprio módulo, serão colocados no local de sua distribuição preferido. Se a distro sair com um pacote oficial para uma versão mais recente do Some :: Random :: Module, ela será automaticamente instalada quando você atualizar o apt.

mikegrb
fonte
7

Já respondi e aceitei a resposta - mas mesmo assim:

IMHO, a maneira mais fácil de instalar os módulos CPAN (em sistemas como o Unix e sem ter idéia das maravilhas) é:

curl -L http://cpanmin.us | perl - --sudo App::cpanminus

O acima está instalando o "instalador de módulos CPAN de configuração zero" chamado cpanm. (Pode demorar alguns minutos para instalar - não interrompa o processo)

e depois - simplesmente:

cpanm Foo
cpanm Module::One
cpanm Another::Module
jm666
fonte
6

Muitas recomendações para CPAN.pm, o que é ótimo, mas se você estiver usando Perl 5.10, também terá acesso ao CPANPLUS.pmque é semelhante, CPAN.pmmas melhor.

E, é claro, está disponível CPANpara pessoas que ainda usam versões mais antigas do Perl. Por que nao tentar:

$ cpan CPANPLUS
Dave Cross
fonte
Heh, isso é fofo. Use CPAN.pm para substituir-se pelo CPANPLUS. :)
brian d foy
5

Muitas vezes acontece que o comando cpan install falha com a mensagem "make test retornou um status ruim, não será instalado sem força"

Nesse caso, a seguir é a maneira de instalar o módulo:

perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"
jaxbihani
fonte
Infelizmente, este rendimento: Não é possível localizar CPAN.pm em @INC (pode ser necessário instalar o módulo CPAN) (@INC contém: / etc / perl
IgorGanapolsky
4

No ubuntu, a maioria dos módulos perl já está empacotada; portanto, a instalação é muito mais rápida do que a maioria dos outros sistemas que precisam compilar.

Para instalar Foo::Barem um prompt de comando, por exemplo, geralmente você apenas faz:

sudo apt-get install libfoo-bar-perl

Infelizmente, nem todos os módulos seguem essa convenção de nomenclatura.

Myforwik
fonte
4

Mesmo deve funcionar:

cpan -i module_name
serenesat
fonte
4

Use o comando cpan como cpan Modulename

$ cpan HTML::Parser

Para instalar dependências, siga as instruções abaixo

$ perl -MCPAN -e shell
cpan[1]>  o conf prerequisites_policy follow
cpan[2]>  o conf commit
exit

Eu prefiro App :: cpanminus , instala dependências automaticamente. Apenas faça

$ cpanm HTML::Parser
Chankey Pathak
fonte
3

2 maneiras que eu conheço:

USANDO PPM:

Com Windows (ActivePerl), usei ppm

na linha de comando, digite ppm. No prompt do ppm ...

ppm> install foo

ou

ppm> search foo

para obter uma lista de módulos foo disponíveis. Digite ajuda para todos os comandos

USANDO CPAN:

você também pode usar o CPAN assim ( * nix systems ):

perl -MCPAN -e 'shell'

recebe um aviso

cpan>

no prompt ...

cpan> install foo  (again to install the foo module)

digite h para obter uma lista de comandos para o cpan

JWHEAT
fonte
1
Você também pode dizer "$ cpan Foo :: Bar" para instalar diretamente a partir da linha de comando. Não é necessário um one-liner sofisticado ou shell CPAN. :)
Brian d foy
3

No Fedora você pode usar

# yum install foo

desde que o Fedora possua um pacote existente para o módulo.

Bruce Alderman
fonte
3

Em Fedora Linuxou Enterprise Linux, yumtambém faixas perl dependências da biblioteca. Portanto, se o módulo perl estiver disponível e algum pacote rpm exportar essa dependência, ele instalará o pacote certo para você.

yum install 'perl(Chocolate::Belgian)'

(provavelmente pacote perl-Chocolate-belga, ou mesmo pacote ChocolateFactory)

Michal Ingeli
fonte
3

A maneira mais fácil para mim é esta:

PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install DateTime::TimeZone'

a) detecção / resolução / instalação de dependência recursiva automática

b) é um shell onliner, bom para scripts de instalação

Senhor X
fonte
2

Se você deseja colocar o novo módulo em um local personalizado que seu shell cpan não está configurado para usar, talvez seja útil o seguinte.

 #wget <URL to the module.tgz>
 ##unpack
 perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install
venkrao
fonte
2

Às vezes, você pode usar o yum search foopara pesquisar o módulo perl relativo e usar yum install xxxpara instalar.

Chris Forever
fonte
2

Solução segura

Muitas respostas mencionam o uso do cpanutilitário (que usa CPAN.pm) sem uma palavra sobre segurança. Por padrão, a CPANversão 2.27 e anterior configura urllistpara usar um URL http (ou seja, http://www.cpan.org/ ), que permite ataques MITM, portanto, é inseguro. É o que é usado para baixar os CHECKSUMSarquivos, para que ele precise ser alterado para um URL seguro (por exemplo, https://www.cpan.org/ ).

Portanto, depois de executar o cpan e aceitar a configuração padrão, é necessário modificar o MyConfig.pmarquivo gerado (o caminho completo é gerado) da seguinte maneira. Substituir

'urllist' => [q[http://www.cpan.org/]],

de

'urllist' => [q[https://www.cpan.org/]],

Nota: https não é suficiente; você também precisa de um site em que possa confiar. Portanto, tenha cuidado se quiser escolher algum espelho arbitrário.

Então você pode usar cpanda maneira usual.

Meu relatório de erros no site rt.cpan.org sobre o URL não seguro.

vinc17
fonte
" Cpan.org " não é redirecionado para " cpan.org "?
Dave Everitt
1
@DaveEveritt O redirecionamento de http para https é útil apenas para privacidade, por exemplo, contra alguém que pode apenas ver os dados em trânsito na rede. Mas se um invasor controla a rede (por exemplo, um ponto de acesso Wi-Fi público ou alguma rede local não protegida), um ataque do tipo intermediário pode ser possível e o atacante usará seu próprio servidor (obviamente não https://www.cpan.org/).
vinc17 13/04
1

No Windows com a distribuição ActiveState do Perl, use o comando ppm .

PW.
fonte
1

Simplesmente executar cpan Foo::Barno shell serviria ao propósito.

Kamal Nayan
fonte
1

Parece que você já recebeu sua resposta, mas imaginei que participaria. Isto é o que faço em alguns scripts em um Ubuntu (ou servidor debian)

#!/usr/bin/perl

use warnings;
use strict;

#I've gotten into the habit of setting this on all my scripts, prevents weird path issues if the script is not being run by root
$ENV{'PATH'} = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin';

#Fill this with the perl modules required for your project
my @perl = qw(LWP::Simple XML::LibXML MIME::Lite DBI DateTime Config::Tiny Proc::ProcessTable);

chomp(my $curl = `which curl`);

if(!$curl){ system('apt-get install curl -y > /dev/null'); }

chomp(my $cpanm = system('/bin/bash', '-c', 'which cpanm &>/dev/null'));

#installs cpanm if missing
if($cpanm){ system('curl -s -L http://cpanmin.us | perl - --sudo App::cpanminus'); }

#loops through required modules and installs them if missing
foreach my $x (@perl){
    eval "use $x";
    if($@){
        system("cpanm $x");
        eval "use $x";
    }
}

Isso funciona bem para mim, talvez haja algo aqui que você possa usar.

Ed Dunn
fonte