Qual é a maneira mais fácil de instalar um módulo Perl ausente?
Pergunta
Eu recebo este erro:
Can't locate Foo.pm in @INC
Existe uma maneira mais fácil de instalá-lo do que baixar, descompactar, fazer, etc?
Solução
No Unix:
geralmente você começa cpan na sua concha:
# cpan
e digite
install Chocolate::Belgian
ou em formato abreviado:
cpan Chocolate::Belgian
No Windows:
Se você estiver usando ActivePerl no Windows, o PPM (Gerenciador de Pacotes Perl) tem praticamente a mesma funcionalidade do CPAN.pm.
Exemplo:
# ppm
ppm> search net-smtp
ppm> install Net-SMTP-Multipart
ver Como instalo módulos Perl? nas perguntas frequentes do CPAN
Muitas distribuições enviam muitos módulos perl como pacotes.
- Debian/Ubuntu:
apt-cache search 'perl$'
- Arco Linux:
pacman -Ss '^perl-'
- Gentoo:categoria
dev-perl
Você deve sempre prefira-os, pois você se beneficia do automático (segurança) atualizações e a facilidade de remoção.Isso pode ser bastante complicado com o cpan ferramenta em si.
Para o Gentoo existe uma ferramenta interessante chamada g-cpan que constrói/instala o módulo do CPAN e cria um pacote Gentoo (construir) para você.
Outras dicas
Tentar Aplicativo::cpanminus:
# cpanm Chocolate::Belgian
É ótimo apenas para instalar coisas.Ele não oferece 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, basta digitar:
# cpan App::cpanminus
para instalá-lo.
Também é possível instalá-lo sem usar o cpan.O procedimento básico de bootstrap é,
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
Para mais informações acesse a página App::cpanminus e veja a seção sobre instalação.
Observo que algumas pessoas sugerem executar o cpan no sudo.Isso costumava ser necessário para instalar no diretório do sistema, mas as versões modernas do shell CPAN permitem configurá-lo para usar o sudo apenas para instalação.Isso é muito mais seguro, pois significa que os testes não são executados como root.
Se você tiver um shell CPAN antigo, simplesmente instale o novo cpan ("instalar CPAN") e quando você recarregar o shell, ele deverá solicitar que você configure essas novas diretivas.
Hoje em dia, 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 com o cpan como um usuário normal.
Além disso, sugiro fortemente que os usuários do Windows investiguem Perl de morango.Esta é uma versão do Perl que vem com um shell CPAN pré-configurado, bem como um compilador.Ele também inclui alguns módulos Perl difíceis de compilar com suas dependências externas de biblioteca C, notadamente XML::Parser.Isso significa que você pode fazer a mesma coisa que qualquer outro usuário Perl quando se trata de instalar módulos, e as coisas tendem a "simplesmente funcionar" com muito mais frequência.
Se você estiver no Ubuntu e quiser instalar o módulo perl pré-empacotado (por exemplo, geo::ipfree) tente isto:
$ apt-cache search perl geo::ipfree libgeo-ipfree-perl - A look up country of ip address Perl module $ sudo apt-get install libgeo-ipfree-perl
Algumas pessoas mencionaram o utilitário cpan, mas é mais do que apenas iniciar um shell.Basta fornecer os módulos que deseja instalar e deixá-lo funcionar.
$prompt> cpan Foo::Bar
Se você não fornecer nenhum argumento, ele iniciará o shell CPAN.pm.Isso funciona em Unix, Mac e deve funcionar bem no Windows (especialmente Strawberry Perl).
Existem várias outras coisas que você também pode fazer com a ferramenta cpan.Aqui está um resumo dos recursos atuais (que podem ser mais recentes que aquele que vem com CPAN.pm e 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.
sudo perl -MCPAN -e 'install Foo'
Veja também Sim, até você pode usar CPAN.Mostra como você pode usar o CPAN sem ter acesso root ou sudo.
Otto fez um boa sugestão.Isso também funciona para o Debian, assim como para qualquer outro derivado do Debian.A peça que falta é o que fazer quando a pesquisa do apt-cache não encontra 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 que 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 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, que serão colocados no local de sua distribuição escolhido.Se a distribuição vier com um pacote oficial para uma versão mais recente do Some::Random::Module, ele será instalado automaticamente quando você fizer o apt-get upgrade.
Já respondi e aceitei a resposta - mas mesmo assim:
IMHO, a maneira mais fácil de instalar módulos CPAN (em sistemas do tipo Unix e não tenho ideia 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 levar vários minutos para instalar - não interrompa o processo)
e depois - simplesmente:
cpanm Foo
cpanm Module::One
cpanm Another::Module
Muitas recomendações para CPAN.pm
, o que é ótimo, mas se você estiver usando Perl 5.10
então você também terá acesso a CPANPLUS.pm
que é como CPAN.pm
mas melhor.
E, claro, está disponível em CPAN
para pessoas que ainda usam versões mais antigas do Perl.Por que nao tentar:
$ cpan CPANPLUS
Muitas vezes acontece que o comando de instalação cpan falha com a mensagem como"make test retornou status ruim, não instala sem forçar"
Nesse caso a seguir está a maneira de instalar o módulo:
perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"
No ubuntu a maioria dos módulos perl já estão empacotados, então a instalação é muito mais rápida do que a maioria dos outros sistemas que precisam ser compilados.
Para instalar Foo::Bar
em um prompt de comando, por exemplo, normalmente você apenas faz:
sudo apt-get install libfoo-bar-perl
Infelizmente, nem todos os módulos seguem essa convenção de nomenclatura.
Até deveria funcionar:
cpan -i module_name
Use o comando cpan como cpan Modulename
$ cpan HTML::Parser
Para instalar dependências automaticamente siga o seguinte
$ perl -MCPAN -e shell
cpan[1]> o conf prerequisites_policy follow
cpan[2]> o conf commit
exit
eu prefiro Aplicativo::cpanminus, ele instala dependências automaticamente.Apenas faça
$ cpanm HTML::Parser
2 maneiras que eu conheço:
USANDO PPM:
Com janelas (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.Tipo ajuda para todos os comandos
USANDO CPAN:
você também pode usar o CPAN assim (*sistemas nix) :
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 cpan
No Fedora você pode usar
# yum install foo
contanto que o Fedora tenha um pacote existente para o módulo.
Sobre Fedora Linux
ou Enterprise Linux
, yum
também rastreia dependências da biblioteca perl.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-Belgian, ou mesmo pacote ChocolateFactory)
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 automática de dependência recursiva
b) é um shell onliner, bom para scripts de configuração
Se você quiser colocar o novo módulo em um local personalizado que seu shell cpan não esteja configurado para usar, talvez o seguinte seja útil.
#wget <URL to the module.tgz>
##unpack
perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install
Às vezes você pode usar o yum search foo
para pesquisar o módulo perl relativo, então use yum install xxx
para instalar.
No Windows com a distribuição ActiveState do Perl, use o ppm comando.
Simplesmente executando cpan Foo::Bar
no shell serviria ao propósito.
Parece que você já tem sua resposta, mas resolvi intervir.Isto é o que eu 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.