NAME¶
local::lib~[pt_br] - crie e use um diretorio lib/ local para modulos perl com
PERL5LIB
SINOPSE¶
No codigo -
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 a aplicaca~o
Pela linha de comando (shell) -
# Instala o LWP e suas dependencias na~o encontradas no diretorio '~/perl5'
perl -MCPAN -Mlocal::lib -e 'CPAN::install(LWP)'
# Apenas exibe alguns comandos uteis 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"
A tecnica de 'bootstrapping'¶
Uma forma comum de instalar o local::lib e usando o que e conhecido como tecnica
de "bootstrapping". E uma boa abordagem caso seu administrador de
sistemas na~o tenha instalado o local::lib. Nesse caso, voce precisara
instalar o local::lib em seu diretorio de usuario.
Caso voce tenha privilegios de administrador, ainda assim devera configurar suas
variaveis de ambiente, como discutido no passo 4, abaixo. Sem elas, voce ainda
instalara modulos no CPAN do sistema e seus scripts Perl na~o utilizara~o o
caminho para o lib/ que voce definiu com o local::lib.
Por padra~o, o local::lib instala os modulos do CPAN e a si proprio em ~/perl5.
Usuarios do Windows devem ler "Diferencas ao usar esse modulo em
Win32".
1. Baixe e descompacte o local::lib do CPAN (procure por "Download" na
pagina do CPAN sobre o local::lib). Faca isso como um usuario comum, na~o como
root ou administrador. Descompacte o arquivo em seu diretorio de usuario ou em
qualquer outro local conveniente.
2. Execute isso:
perl Makefile.PL --bootstrap
Caso o sistema pergunte se deve configurar tudo que puder automaticamente, voce
provavelmente deve responder que sim (yes).
Para instalar o local::lib em um diretorio que na~o o padra~o, voce precisara
especifica-lo ao chamar o bootstrap, da seguinte forma:
perl Makefile.PL --bootstrap=~/foo
3. Execute isso: (local::lib assume que voce possui o comando 'make' instalado
em seu sistema)
make test && make install
4. Agora precisamos configurar as variaveis de ambiente apropriadas para que o
Perl use nosso recem-criado diretorio lib/. Caso esteja usando bash ou outra
shell Bourne, voce pode fazer isso adicionando a seguinte linha em seu script
de inicializaca~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 diretorio que na~o o padra~o, voce
precisara indica-lo na chamada ao local::lib, dessa forma:
echo 'eval $(perl -I$HOME/foo/lib/perl5 -Mlocal::lib=$HOME/foo)' >>~/.bashrc
Apos atualizar seu arquivo de configuraca~o da shell, certifique-se de
processa-lo novamente para obter as modificaco~es em sua shell atual. Shells
Bourne usam ". ~/.bashrc" para isso, enquanto shells C usam
"source ~/.cshrc".
Se estiver em uma maquina lenta ou operando com grandes limitaco~es de espaco em
disco, voce pode desativar a geraca~o automatica de manpages a partir do POD
ao instalar modulos. Para isso, basta passar o argumento
"--no-manpages" durante o bootstrap:
perl Makefile.PL --bootstrap --no-manpages
Para evitar ter que fazer varios bootstraps para varios ambientes de modulos
Perl na mesma conta de usuario - por exemplo se voce usa o local::lib para
desenvolver diferentes aplicativos independentes - voce pode utilizar uma
unica instalaca~o bootstrap do local::lib para instalar modulos em diretorios
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 esta na PERL5LIB
perl -MCPAN -e install ... ### Os modulos que quiser
cd ../meudir2
... REPITA ...
Para multiplos ambientes destinados a multiplos aplicativos, voce pode precisar
incluir uma versa~o modificada das instruco~es de "use FindBin" no
exemplo "No codigo" acima. Caso tenha feito algo como o que foi
descrito acima, tera um conjunto de modulos Perl em "~/meudir1/lib".
Caso tenha um script em "~/meudir1/scripts/meuscript.pl", voce
precisara indicar a ele onde encontrar os modulos 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 modulos
instalados.
Diferencas ao usar esse modulo em Win32¶
Para configurar as variaveis de ambiente apropriadas para sua sessa~o atual do
"CMD.exe", voce pode fazer assim:
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 configuraco~es do ambiente persistam, voce precisara
adiciona-las em Painel de Controle -> Sistema, ou usar o
App::local::lib::Win32Helper.
O "~" e transformado no diretorio do perfil do usuario (o diretorio
com o nome do usuario dentro de "Documents and Settings" (Windows XP
ou anterior) ou "Usuarios" (Windows Vista e mais recentes)) a menos
que $ENV{HOME} exista. Apos isso, o nome do diretorio e encurtado e os
subdiretorios sa~o criados (o que significa que o diretorio deve existir).
MOTIVACA~O¶
A versa~o de um pacote Perl na sua maquina nem sempre e a que voce precisa.
Obviamente, a melhor coisa a fazer seria atualiza-la para a versa~o desejada.
No entanto, voce pode estar em uma situaca~o que o impede de fazer isso.
Talvez voce na~o tenha privilegios de administrador do sistema; ou talvez
esteja usando um sistema de gerenciamento de pacotes como o do Debian, e ainda
na~o exista um pacote disponivel na versa~o desejada.
local::lib resolve esse problema possibilitando a criaca~o de seu proprio
diretorio de pacotes Perl obtidos do CPAN (em sistemas multi-usuario, isso
normalmente fica dentro do diretorio de seu usuario). A instalaca~o do Perl no
sistema permanece inalterada; voce simplesmente chama o Perl com opco~es
especiais para que ele use os pacotes em seu diretorio local em vez dos
pacotes do sistema. O local::lib organiza as coisas para que verso~es dos
pacotes Perl instalados localmente tenham precedencia sobre as do sistema.
Caso esteja usando um sistema de gerenciamento de pacote (como em sistemas
Debian), na~o precisara se preocupar com conflitos entre o Debian e o CPAN.
Sua versa~o local dos pacotes sera instalada em um diretorio completamente
diferente das verso~es instaladas pelo gerenciador de pacotes do sistema.
DESCRICA~O¶
Este modulo oferece uma forma rapida e conveniente para criar um repositorio de
modulos locais ao usuario, dentro do diretorio do mesmo. Ele tambem monta e
exibe para o usuario uma lista de variaveis de ambiente utilizando a sintaxe
da shell atual do usuario (conforme especificado pela variavel de ambiente
"SHELL"), pronta para ser adicionada diretamente no arquivo de
configuraca~o da shell.
Generalizando, o local::lib permite a criaca~o e uso de um diretorio contendo
modulos Perl fora do @INC do Perl. Isso facilita a produca~o de aplicaco~es
com uma versa~o especifica de determinado modulo, ou coleca~o de modulos.
Tambem e util quando o mantenedor de um modulo na~o aplicou determinado patch
que voce precisa para seu aplicativo.
Durante o "import", o local::lib define valores apropriados para as
seguintes variaveis de ambiente:
- PERL_MB_OPT
- PERL_MM_OPT
- PERL5LIB
- PATH
- valores sera~o anexados ao PATH, em vez de
substitui-lo.
Esses valores sa~o enta~o disponibilizados para referencia por qualquer outro
codigo apos o "import".
CRIANDO UM CONJUNTO AUTO-CONTIDO DE MODULOS¶
Veja lib::core::only para uma maneira de fazer isso - mas note que ha uma serie
de ressalvas na abordagem, e a melhor forma e sempre fazer o 'build' contra
uma versa~o limpa do perl (i.e. com 'site' e 'vendor' o mais vazios possivel).
METODOS¶
ensure_dir_structure_for¶
- Argumentos: $caminho_do_diretorio
- Valor de Retorno: Nenhum
Tenta criar o caminho fornecido, e todos os diretorios superiores necessarios.
Gera uma exceca~o em caso de falha.
print_environment_vars_for¶
- Argumentos: $caminho_do_diretorio
- Valor de Retorno: Nenhum
Exibe na saida padra~o as variaveis listadas acima, devidamente ajustadas para
utilizar o caminho fornecido como diretorio base.
build_environment_vars_for¶
- Argumentos: $caminho_do_diretorio, $interpolar
- Valor de Retorno: %variaveis_de_ambiente
Retorna hash contendo as variaveis de ambiente listadas acima, devidamente
ajustadas para utilizar o caminho fornecido como diretorio base.
setup_env_hash_for¶
- Argumentos: $caminho_do_diretorio
- Valor de Retorno: Nenhum
Constroi as chaves no %ENV para o caminho fornecido, chamando
"build_environment_vars_for".
install_base_perl_path¶
- Argumentos: $caminho_do_diretorio
- Valor de Retorno: $caminho_base_de_instalacao
Retorna um caminho de diretorio indicando onde instalar os modulos Perl para
essa instalaca~o local de bibliotecas. Adiciona os diretorios "lib"
e "perl5" ao final do caminho fornecido.
install_base_arch_path¶
- Argumentos: $caminho_do_diretorio
- Valor de Retorno: $caminho_base_de_instalacao_arch
Retorna um caminho de diretorio indicando onde instalar os modulos Perl de
arquiteturas especificas para essa instalaca~o local de bibliotecas. Baseia-se
no valor de retorno do metodo "install_base_perl_path", adicionando
o valor de $Config{archname}.
install_base_bin_path¶
- Argumentos: $caminho_do_diretorio
- Valor de Retorno: $caminho_base_de_instalacao_bin
Retorna um caminho de diretorio indicando onde instalar programas executaveis
para essa instalaca~o local de bibliotecas. Baseia-se no valor de retorno do
metodo "install_base_perl_path", adicionando o diretorio
"bin".
resolve_empty_path¶
- Argumentos: $caminho_do_diretorio
- Valor de Retorno: $caminho_base_de_instalacao
Cria e retorna o caminho de diretorio raiz em que a instalaca~o local de modulos
deve ser feita. O padra~o e "~/perl5".
resolve_home_path¶
- Argumentos: $caminho_do_diretorio
- Valor de Retorno: $caminho_para_home
Procura pelo diretorio padra~o (home) do usuario. Caso esteja instalado, utiliza
o "File::HomeDir" para isso. Gera uma exceca~o caso na~o encontre
resultado definitivo.
resolve_relative_path¶
- Argumentos: $caminho_do_diretorio
- Valor de Retorno: $caminho_absoluto
Transforma o caminho fornecido em um caminho absoluto.
resolve_path¶
- Argumentos: $caminho_do_diretorio
- Valor de Retorno: $caminho_absoluto
Invoca os seguintes metodos em sequencia, passando o resultado do metodo
anterior para o seguinte, na tentativa de descobrir onde configurar o ambiente
para a instalaca~o local de bibliotecas: "resolve_empty_path",
"resolve_home_path", "resolve_relative_path". Passa o
caminho de diretorio fornecido para "resolve_empty_path" que retorna
um resultado que e passado para "resolve_home_path", que enta~o tem
seu resultado passado para "resolve_relative_path". O resultado
dessa chamada final e enta~o retornado pelo "resolve_path".
UM AVISO SOBRE UNINST=1¶
Tenha cuidado ao usar o local::lib em conjunto com "make install
UNINST=1". A ideia dessa opca~o e desinstalar a versa~o anterior de um
modulo antes de instalar a mais recente. No entanto ela na~o possui uma
verificaca~o de seguranca de que a versa~o antiga e a nova referem-se ao mesmo
diretorio. Usada em combinaca~o com o local::lib, voce pode potencialmente
apagar uma versa~o globalmente acessivel de um modulo e instalar a versa~o
mais nova no diretorio local. Apenas utilize "make install UNINST=1"
junto com o local::lib se voce entende essas possiveis consequencias.
LIMITACO~ES¶
As ferramentas auxiliares do perl na~o conseguem lidar com nomes de diretorios
contendo espacos, enta~o na~o e possivel fazer seu bootstrap do local::lib em
um diretorio com espacos. O que voce pode fazer e mover seu local::lib para um
diretorio com espacos
apos ter instalado todos os modulos dentro dele.
Mas esteja ciente que voce na~o podera atualizar ou instalar outros modulos do
CPAN nesse diretorio local apos a mudanca.
A detecca~o da shell e relativamente basica. Neste momento, qualquer coisa com
csh no nome sera tratada como a C shell ou compativel, e todo o resto sera
tratado como Bourne, exceto em sistemas Win32. Caso a variavel de ambiente
"SHELL" na~o esteja disponivel, assumiremos tratar-se de uma shell
compativel com a Bourne.
A tecnica de bootstrap e um hack e usara o CPAN.pm para o ExtUtils::MakeMaker
mesmo que voce tenha o CPANPLUS instalado.
Destroi qualquer valor pre-existente nas variaveis de ambiente PERL5LIB,
PERL_MM_OPT e PERL_MB_OPT.
Provavelmente deveria auto-configurar o CPAN caso isso ainda na~o tenha sido
feito.
Correco~es (patches) sa~o muito bem-vindos para quaisquer dos itens acima.
Em sistemas Win32, na~o ha uma forma de escrever no registro as variaveis de
ambiente criadas, para que elas persistam a uma reinicializaca~o.
SOLUCA~O DE PROBLEMAS¶
Se voce configurou o local::lib para instalar modulos do CPAN em algum lugar do
seu 'home', e mais tarde tentou instalar um modulo fazendo "cpan -i
Foo::Bar", mas ele falhou com um erro como: "Warning: You do not
have permissions to install into /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux
at /usr/lib64/perl5/5.8.8/Foo/Bar.pm" e em algum lugar no seu log de
instalaca~o houver um erro dizendo "'INSTALL_BASE' is not a known
MakeMaker parameter name", enta~o voce de alguma forma perdeu seu
ExtUtils::MakeMaker atualizado.
Para remediar a situaca~o, execute novamente o procedimento de bootstrap
descrito acima.
Enta~o, execute "rm -r ~/.cpan/build/Foo-Bar*"
Finalmente, execute novamente o "cpan -i Foo::Bar" e ele deve instalar
sem problemas.
AMBIENTE¶
- SHELL
- COMSPEC
- O local::lib procura pela variavel de ambiente
"SHELL" do usuario ao processar e exibir os comandos a serem
adicionados no arquivo de configuraca~o da shell.
Em sistemas Win32, "COMSPEC" tambem sera examinado.
SUPORTE¶
IRC:
Acesse #local-lib em irc.perl.org.
AUTOR DA TRADUCA~O¶
Breno G. de Oliveira, "<garu at cpan.org>", apos ter perdido uma
aposta para o Getty <
http://search.cpan.org/~getty/> durante a Copa de
2010.
COPYRIGHT¶
Copyright (c) 2007 - 2010 "AUTHOR" in local::lib e
"CONTRIBUTORS" in local::lib do local::lib como listados em
local::lib.
LICENCA¶
Esta biblioteca e software livre e pode ser distribuida sob os mesmo termos do
perl.