use local::lib; # configura um lib local em ~/perl5 use local::lib '~/foo'; # idem, mas ~/foo # Ou... use FindBin; use local::lib "$FindBin::Bin/../suporte"; # bibliotecas de suporte locais à aplicação
Pela linha de comando (shell) -
# Instala o LWP e suas dependências não encontradas no diretório '~/perl5' perl -MCPAN -Mlocal::lib -e 'CPAN::install(LWP)' # Apenas exibe alguns comandos úteis para a shell $ perl -Mlocal::lib export PERL_MB_OPT='--install_base /home/username/perl5' export PERL_MM_OPT='INSTALL_BASE=/home/username/perl5' export PERL5LIB='/home/username/perl5/lib/perl5/i386-linux:/home/username/perl5/lib/perl5' export PATH="/home/username/perl5/bin:$PATH"
Caso você tenha privilégios de administrador, ainda assim deverá configurar suas variáveis de ambiente, como discutido no passo 4, abaixo. Sem elas, você ainda instalará módulos no CPAN do sistema e seus scripts Perl não utilizarão o caminho para o lib/ que você definiu com o local::lib.
Por padrão, o local::lib instala os módulos do CPAN e a si próprio em ~/perl5.
Usuários do Windows devem ler ``Diferenças ao usar esse módulo em Win32''.
1. Baixe e descompacte o local::lib do CPAN (procure por ``Download'' na página do CPAN sobre o local::lib). Faça isso como um usuário comum, não como root ou administrador. Descompacte o arquivo em seu diretório de usuário ou em qualquer outro local conveniente.
2. Execute isso:
perl Makefile.PL --bootstrap
Caso o sistema pergunte se deve configurar tudo que puder automaticamente, você provavelmente deve responder que sim (yes).
Para instalar o local::lib em um diretório que não o padrão, você precisará especificá-lo ao chamar o bootstrap, da seguinte forma:
perl Makefile.PL --bootstrap=~/foo
3. Execute isso: (local::lib assume que você possui o comando 'make' instalado em seu sistema)
make test && make install
4. Agora precisamos configurar as variáveis de ambiente apropriadas para que o Perl use nosso recém-criado diretório lib/. Caso esteja usando bash ou outra shell Bourne, você pode fazer isso adicionando a seguinte linha em seu script de inicialização da shell:
echo 'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)' >>~/.bashrc
Caso esteja usando a shell C, pode fazer da seguinte forma:
/bin/csh echo $SHELL /bin/csh perl -I$HOME/perl5/lib/perl5 -Mlocal::lib >> ~/.cshrc
Caso tenha passado para o bootstrap um diretório que não o padrão, você precisará indicá-lo na chamada ao local::lib, dessa forma:
echo 'eval $(perl -I$HOME/foo/lib/perl5 -Mlocal::lib=$HOME/foo)' >>~/.bashrc
Após atualizar seu arquivo de configuração da shell, certifique-se de processá-lo novamente para obter as modificações em sua shell atual. Shells Bourne usam ". ~/.bashrc" para isso, enquanto shells C usam "source ~/.cshrc".
Se estiver em uma máquina lenta ou operando com grandes limitações de espaço em disco, você pode desativar a geração automática de manpages a partir do POD ao instalar módulos. Para isso, basta passar o argumento "--no-manpages" durante o bootstrap:
perl Makefile.PL --bootstrap --no-manpages
Para evitar ter que fazer vários bootstraps para vários ambientes de módulos Perl na mesma conta de usuário - por exemplo se você usa o local::lib para desenvolver diferentes aplicativos independentes - você pode utilizar uma única instalação bootstrap do local::lib para instalar módulos em diretórios diferentes da seguinte forma:
cd ~/meudir1 perl -Mlocal::lib=./ eval $(perl -Mlocal::lib=./) ### Para configurar o ambiente apenas nessa shell printenv ### Veja que o ~/meudir1 está na PERL5LIB perl -MCPAN -e install ... ### Os módulos que quiser cd ../meudir2 ... REPITA ...
Para múltiplos ambientes destinados a múltiplos aplicativos, você pode precisar incluir uma versão modificada das instruções de "use FindBin" no exemplo ``No código'' acima. Caso tenha feito algo como o que foi descrito acima, terá um conjunto de módulos Perl em "~/meudir1/lib". Caso tenha um script em "~/meudir1/scripts/meuscript.pl", você precisará indicar a ele onde encontrar os módulos que instalou para ele em "~/meudir1/lib".
Em "~/meudir1/scripts/meuscript.pl":
use strict; use warnings; use local::lib "$FindBin::Bin/.."; ### aponta para ~/meudir1 e o local::lib acha o lib/ use lib "$FindBin::Bin/../lib"; ### aponta para ~/meudir1/lib
Coloque isso antes de qualquer bloco BEGIN { ... } que precise dos módulos instalados.
C:\>perl -Mlocal::lib set PERL_MB_OPT=--install_base C:\DOCUME~1\ADMINI~1\perl5 set PERL_MM_OPT=INSTALL_BASE=C:\DOCUME~1\ADMINI~1\perl5 set PERL5LIB=C:\DOCUME~1\ADMINI~1\perl5\lib\perl5;C:\DOCUME~1\ADMINI~1\perl5\lib\perl5\MSWin32-x86-multi-thread set PATH=C:\DOCUME~1\ADMINI~1\perl5\bin;%PATH% ### Para configurar o ambiente apenas dessa shell C:\>perl -Mlocal::lib > %TEMP%\tmp.bat && %TEMP%\tmp.bat && del %TEMP%\temp.bat ### em vez de $(perl -Mlocal::lib=./)
Caso queira que as configurações do ambiente persistam, você precisará adicioná-las em Painel de Controle -> Sistema, ou usar o App::local::lib::Win32Helper.
O ``~'' é transformado no diretório do perfil do usuário (o diretório com o nome do usuário dentro de ``Documents and Settings'' (Windows XP ou anterior) ou ``Usuários'' (Windows Vista e mais recentes)) a menos que $ENV{HOME} exista. Após isso, o nome do diretório é encurtado e os subdiretórios são criados (o que significa que o diretório deve existir).
local::lib resolve esse problema possibilitando a criação de seu próprio diretório de pacotes Perl obtidos do CPAN (em sistemas multi-usuário, isso normalmente fica dentro do diretório de seu usuário). A instalação do Perl no sistema permanece inalterada; você simplesmente chama o Perl com opções especiais para que ele use os pacotes em seu diretório local em vez dos pacotes do sistema. O local::lib organiza as coisas para que versões dos pacotes Perl instalados localmente tenham precedência sobre as do sistema.
Caso esteja usando um sistema de gerenciamento de pacote (como em sistemas Debian), não precisará se preocupar com conflitos entre o Debian e o CPAN. Sua versão local dos pacotes será instalada em um diretório completamente diferente das versões instaladas pelo gerenciador de pacotes do sistema.
Generalizando, o local::lib permite a criação e uso de um diretório contendo módulos Perl fora do @INC do Perl. Isso facilita a produção de aplicações com uma versão específica de determinado módulo, ou coleção de módulos. Também é útil quando o mantenedor de um módulo não aplicou determinado patch que você precisa para seu aplicativo.
Durante o "import", o local::lib define valores apropriados para as seguintes variáveis de ambiente:
Esses valores são então disponibilizados para referência por qualquer outro código após o "import".
Tenta criar o caminho fornecido, e todos os diretórios superiores necessários. Gera uma exceção em caso de falha.
Exibe na saída padrão as variáveis listadas acima, devidamente ajustadas para utilizar o caminho fornecido como diretório base.
Retorna hash contendo as variáveis de ambiente listadas acima, devidamente ajustadas para utilizar o caminho fornecido como diretório base.
Constrói as chaves no %ENV para o caminho fornecido, chamando "build_environment_vars_for".
Retorna um caminho de diretório indicando onde instalar os módulos Perl para essa instalação local de bibliotecas. Adiciona os diretórios "lib" e "perl5" ao final do caminho fornecido.
Retorna um caminho de diretório indicando onde instalar os módulos Perl de arquiteturas específicas para essa instalação local de bibliotecas. Baseia-se no valor de retorno do método ``install_base_perl_path'', adicionando o valor de $Config{archname}.
Retorna um caminho de diretório indicando onde instalar programas executáveis para essa instalação local de bibliotecas. Baseia-se no valor de retorno do método ``install_base_perl_path'', adicionando o diretório "bin".
Cria e retorna o caminho de diretório raiz em que a instalação local de módulos deve ser feita. O padrão é "~/perl5".
Procura pelo diretório padrão (home) do usuário. Caso esteja instalado, utiliza o "File::HomeDir" para isso. Gera uma exceção caso não encontre resultado definitivo.
Transforma o caminho fornecido em um caminho absoluto.
Invoca os seguintes métodos em sequência, passando o resultado do método anterior para o seguinte, na tentativa de descobrir onde configurar o ambiente para a instalação local de bibliotecas: ``resolve_empty_path'', ``resolve_home_path'', ``resolve_relative_path''. Passa o caminho de diretório fornecido para ``resolve_empty_path'' que retorna um resultado que é passado para ``resolve_home_path'', que então tem seu resultado passado para ``resolve_relative_path''. O resultado dessa chamada final é então retornado pelo ``resolve_path''.
A detecção da shell é relativamente básica. Neste momento, qualquer coisa com csh no nome será tratada como a C shell ou compatível, e todo o resto será tratado como Bourne, exceto em sistemas Win32. Caso a variável de ambiente "SHELL" não esteja disponível, assumiremos tratar-se de uma shell compatível com a Bourne.
A técnica de bootstrap é um hack e usará o CPAN.pm para o ExtUtils::MakeMaker mesmo que você tenha o CPANPLUS instalado.
Destrói qualquer valor pré-existente nas variáveis de ambiente PERL5LIB, PERL_MM_OPT e PERL_MB_OPT.
Provavelmente deveria auto-configurar o CPAN caso isso ainda não tenha sido feito.
Correções (patches) são muito bem-vindos para quaisquer dos itens acima.
Em sistemas Win32, não há uma forma de escrever no registro as variáveis de ambiente criadas, para que elas persistam a uma reinicialização.
Para remediar a situação, execute novamente o procedimento de bootstrap descrito acima.
Então, execute "rm -r ~/.cpan/build/Foo-Bar*"
Finalmente, execute novamente o "cpan -i Foo::Bar" e ele deve instalar sem problemas.
Em sistemas Win32, "COMSPEC" também será examinado.
Acesse #local-lib em irc.perl.org.