NAME¶
local::lib~[de] - Erschaffen und benutzen von Perl Modulen in einem lokalen lib/
Verzeichnis mit PERL5LIB
SYNOPSIS¶
Im Code -
use local::lib; # Benutzt das Verzeichnis ~/perl5 zum anlegen des lokalen lib/ Verzeichnisses
use local::lib '~/foo'; # das selbe, aber mit ~/foo
# Oder...
use FindBin;
use local::lib "$FindBin::Bin/../support"; # Applikationsspezifische Sammlung von Modulen
Von der Shell -
# Installiert LWP und alle notwendigen Abhaengigkeiten in das '~/perl5' Verzeichnis
perl -MCPAN -Mlocal::lib -e 'CPAN::install(LWP)'
# Gibt die Shell Kommandos aus um die Umgebung vorzubereiten
$ 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"
Die Bootstrapping Methode¶
Ein typischer Weg um local::lib zu benutzen ist die sogenannte
"Bootstrapping" Methode. Diese Methode wird benutzt wenn noch kein
local::lib auf dem System installiert ist. In diesem Fall kannst du einfach
local::lib direkt in deinem Home-Verzeichnis installieren.
Selbst wenn du administrative Rechte hast, ist es wichtig das die
Umgebungsvariablen von Schritt 4 in deinem Shell Startup Skript gesetzt
werden. Ohne diesen Schritt werden die Module von CPAN weiterhin im System
installiert und auch Perl Skripte die du startest wuerden das von local::lib
erstellte lib/ Verzeichnis nicht nutzen.
Standardmaessig installiert sich local::lib in ~/perl5.
Windows Benutzern muessen ausserdem dies hier lesen: "Unterschiede bei
Benutzung dieses Module mit Win32".
1. Lade das Tar-Archiv von CPAN runter (Suche nach "Download" auf der
CPAN Seite von local::lib) und entpacke es in einem beliebigem Verzeichnis. Um
das obige Problem zu vermeiden, sollte man dies als normaler User tun und
nicht als root oder Administrator.
2. Starte in dem entstandenen Verzeichnis folgenden Befehl:
perl Makefile.PL --bootstrap
Wenn das System dir vorschlaegt gewisse Dinge eigenstaendig zu konfigurieren ist
es in fast allen Faellen vollkommen in Ordnung einfach "yes" zu
antworten.
Falls du local::lib nicht in das Standard Verzeichnis installieren willst, musst
du dieses Verzeichnis als Parameter angeben:
perl Makefile.PL --bootstrap=~/foo
3. Danach folgenden Befehl starten: (local::lib erwartet make auf dem System)
make test && make install
4. Nun muessen wir die benoetigten Umgebungsvariablen, damit Perl unser neu
generiertes lib/ Verzeichnis benutzt. Wenn du bash oder eine andere Bourne
Shell benutzt, kannst du es ueber diesen Weg zu deinem Shell Startup Skript
hinzufuegen:
echo 'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)' >>~/.bashrc
Wenn du C Shell benutzt, du kannst das gleiche hiermit erreichen:
/bin/csh
echo $SHELL
/bin/csh
perl -I$HOME/perl5/lib/perl5 -Mlocal::lib >> ~/.cshrc
Wenn du beim bootstrappen ein anderes Verzeichnis benutzt als das
Standardverzeichnis, dann musst du dieses Verzeichnis als Parameter beim Laden
des Modules local::lib angeben:
echo 'eval $(perl -I$HOME/foo/lib/perl5 -Mlocal::lib=$HOME/foo)' >>~/.bashrc
Nachdem diese Aenderungen in deinem Shell Startup Skript gemacht wurden, ist es
nun wichtig das diese Umgebungsvariablen auch gesetzt sind in deiner aktuellen
Umgebung. In Bourne Shells macht man dies z.B. mit ". ~/.bashrc",
und in C Shell wuerde man es mit: "source ~/.cshrc" mit.
Wenn du eine sehr langsames System hast, oder du unter drakonischen
Regulierungen des Plattenplatz leben musst, kann man die automatische
Generierung der manpages vom POD bei der Installation des Moduls deaktivieren
beim bootstrapping mit dem "--no-manpages" Parameter:
perl Makefile.PL --bootstrap --no-manpages
Um zu vermeiden das man mehrere bootstraps macht um z.B. fuer verschiedene
Applikationen eigene local::lib Installationen zu nutzen, kann man eine dieser
Umgebungen benutzen um einfach in beliebigen anderen Verzeichnis Module zu
installieren und somit weitere eigenstaendige lib/ Umgebungen zu bekommen:
cd ~/mydir1
perl -Mlocal::lib=./
eval $(perl -Mlocal::lib=./) ### Um die Umgebungsvariablen fuer die
### aktuelle Shell zusetzen
printenv ### Hier kannst du sehen das ~/mydir1
### in der PERL5LIB Umgebungsvariable
### steht
perl -MCPAN -e install ... ### welche Module auch immer ...
cd ../mydir2
... WIEDERHOLEN ...
Fuer mehrere Umgebungen in dieser Form brauch man eine Modifikation in der
Benutzung von "use FindBin" in dem "Im Code" Beispiel
oben. Wenn du sowas machst, und du hast damit z.B. Perl Module nach
"~/mydir1/lib" installiert und du hast ein Script in
"~/mydir1/scripts/myscript.pl", du musst dort angeben das die Module
die es braucht im Verzeichnis "~/mydir1/lib" liegen.
In "~/mydir1/scripts/myscript.pl" steht dann:
use strict;
use warnings;
use local::lib "$FindBin::Bin/.."; ### zeigt auf ~/mydir1 und local::lib
### findet dort lib
use lib "$FindBin::Bin/../lib"; ### zeigt auf ~/mydir1/lib
Setze das vor jeden BEGIN { ... } Block der die Module braucht die du
installiert hast.
Unterschiede bei Benutzung dieses Module mit Win32¶
Um die noetigen Umgebungsvariablen fuer diese Variablen in der derzeitigen
Sitzung mit "CMD.EXE" zu setzen, kann man folgendes kommando nutzen:
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%
### Um die Umgebungsvariablen fuer diese Shell alleine zu setzen
C:\>perl -Mlocal::lib > %TEMP%\tmp.bat && %TEMP%\tmp.bat && del %TEMP%\temp.bat
### anstelle von $(perl -Mlocal::lib=./) in bash.
Wenn du willst das die Umgebungsvariablen dauerhaft gesetzt sind, musst du diese
in Systemsteuerung / System dauerhaft selber eintragen oder
App::local::lib::Win32Helper benutzen.
Die "~" wird uebersetzt zu dem Benutzer Profil Verzeichnis (das
Verzeichnis was beim User als "Dokumente und Einstellungen" bekannt
ist unter Windows XP und vorher oder das "Benutzer" Verzeichnis bei
Windows Vista und spaeter), solange $ENV{HOME} nicht gesetzt ist. Das
Verzeichnis wird hierbei zu dem korrekten Kurznamen umgewandelt, und muss
daher definitiv existieren, und wird um die noetigen Unterverzeichnise
erweitert.
GRUNDPRINZIP¶
Die Version von den Perl Paketen die man benoetigt fuer spezifische Aufgaben
sind sehr haeufig nicht die richtigen oder korrekten Versionen auf dem System
vorinstalliert. Ein Updaten von diesen Modulen ist in vielen Faellen einfach
nicht moeglich weil die noetigen Rechte fehlen. Ausserdem ist es generell
nicht gut eigenstaendig die Versionen der Module auf dem System auszutauschen,
weil natuerlich der Rest des Systems genau die Version erwartet die von der
Systemverwaltung auch installiert wurde.
local::lib loest dieses Problem, es erlaubt dir dein komplett eigenes
Verzeichnis fuer deine CPAN Module zu haben und bist so nicht genoetigt die
Module vom System zu nutzen oder andersrum andere User nicht mit individuellen
Modulwuenschen zu Ueberarbeitung ihres Codes zu zwingen, weil bestimmte Module
zentral fuer alle auf neuere Version upgedatet werden. Die Installation findet
hierbei dann z.B. im Home Verzeichnis statt. Es werden nur Umgebungsvariablen
gesetzt die das installierte Perl dazu bewegen die im Homeverzeichnis
installierten Module zu benutzen, zusaetzlich und vorgezogen zu denen auf dem
System.
Daher muss man sich wenn man ein Paket System benutzt, wie z.b. Debian, garnicht
mehr Sorgen machen, irgendwas auf dem System zu verletzten nur durch die
Installation von Perl Modulen.
BESCHREIBUNG¶
Dieses Modul bietet eine schnelle und legitime Art und Weise ein sogenanntes
bootstrapping zu machen um in einem User Homeverzeichnis eine Sammlung von
Modulen zu installieren. Es erstellt auch die noetigen Umgebungsvariablen die
benoetigt werden um diese Module zu nutzen, passend zu der Shell die der User
in der Umgebungsvariable "SHELL" angegeben hat, um dann direkt
passend in die entsprechenden Konfigurationsdateien der Shell einfuegt zu
werden.
Weitergehend ist local::lib in der Lage Module zu nutzen die nicht im
standardmaessigen @INC Pfad von Perl enthalten sind. Das macht es einfacher
fuer bestimmte Applikationen ein bestimmtes Set von Modulen zu installieren
ohne die anderen Module auf dem System in irgendeiner Art anzufassen. Damit es
z.B. auch sicherer Module zu installieren die vom Maintainer noch nicht als
Release verfuegbar sind.
Beim Import setzt local::lib die folgenden Umgebungsvariablen zu den noetigen
Werten:
- PERL_MB_OPT
- PERL_MM_OPT
- PERL5LIB
- PATH
- Am PATH wird natuerlich angehangen, und nicht ersetzt.
Diese Werte sind dann verfuegbar fuer jeden Code der danach importiert wurde.
ERSTELLEN EINES EIGENSTAeNDIGE SAMMLUNG VON MODULEN¶
Mit lib::core::only besteht eine Moeglichkeit dieses zutun, aber beachte das
hier eine Menge von Fallstricken und Problemen existieren, und man sollte
immer darauf achten das man auf einem Perl aufbaut was sowenig wie moeglich
veraendert wurde (d.h. site und vendor Verzeichnis so leer wie moeglich).
METHODEN¶
ensure_dir_structure_for¶
- Parameter: $path
- Rueckgabewert: Keiner
Versucht den angegebenen Pfad anzulegen, mit allen noetigen drueberliegenden
Verzeichnissen. Im Fehlerfall wird eine Exception geworfen.
print_environment_vars_for¶
- Parameter: $pfad
- Rueckgabewert: Keiner
Gibt die Umgebungsvariablen aus, die benoetigt werden um den angegebenen Pfad
als Basis Verzeichnis zu nutzen.
build_environment_vars_for¶
- Parameter: $pfad, $interpolate
- Rueckgabewert: \%umgebungs_variablen
Gibt ein Hash zurueck mit den Variablen die noetig sind in den
Umgebungsvariablen um eine Installation in dem gegebenen Pfad zu benutzen.
setup_env_hash_for¶
- Parameter: $pfad
- Rueckgabewert: Keiner
Setzt die %ENV Eintraege basierend auf dem Aufruf von
"build_environment_vars_for".
install_base_perl_path¶
- Parameter: $pfad
- Rueckgabewert: $module_installations_pfad
Gibt den Pfad zurueck der benutzt wird um Perl Module zu installieren bei dem
gegebenen Pfad als Basis. Prinzipiell wird nur "lib" und
"perl5" als Pfadelemente angehangen.
install_base_arch_path¶
- Parameter: $pfad
- Rueckgabewert: $architektur_module_installations_pfad
Gibt den Pfad zurueck der benutzt wird um die Architektur-abhaengigen Perl
Module zu installieren basirend auf dem angegebenen Pfad als Basis. Basierend
auf dem was "install_base_perl_path" zurueckgibt, and appends the
value of $Config{archname}.asis.
install_base_bin_path¶
- Parameter: $pfad
- Rueckgabewert:
$ausfuehrbare_programme_installations_pfad
Gibt den Pfad zurueck, wo ausfuehrbare Programme installiert werden, basierend
auf der Basis des angegebenen Pfad. Basierend auf
"install_base_perl_path" Rueckgabewert, haengt diese Methode noch
"bin" an.
resolve_empty_path¶
- Parameter: $pfad
- Rueckgabewert: $basis_pfad
Erstellt und gibt zurueck den Pfad der benutzt wird als Basis zur Installation
der Module. Standardmaessig dies ist "~/perl5".
resolve_home_path( $path )¶
- Parameter: $pfad
- Rueckgabewert: $home
Versucht das Home Verzeichnis vom aktullen User zu finden. Wenn
"File::HomeDir" installiert ist, fuer dieses benutzt dafuer. Es wird
eine Exception geworfen, wenn kein Home Verzeichnis ermittelt werden konnte.
resolve_relative_path¶
- Parameter: $pfad
- Rueckgabewert: $absoluter_pfad
Macht aus dem angegebenen Pfad einen absoluten Pfad.
resolve_path¶
- Parameter: $pfad
- Rueckgabewert: $absoluter_pfad
Hierbei wird der Pfad durch die folgende Methoden gegeben, wobei der
Rueckgabewert der ersten an die naechste weitergeben wird, um die Umgebung zu
konfigurieren fuer die lokale Bibliotheks Installation:
"resolve_empty_path", "resolve_home_path",
"resolve_relative_path". Der daraus resultierende Pfad wird zu
"resolve_empty_path" uebergeben, dessen Resultat dann weitergegeben
wird an "resolve_home_path", wessen Resultat dann weitergegeben wird
an "resolve_relative_path". Dieses Resultat wird dann final an
"resolve_path" uebergeben, welches dann den Rueckgabewert stellt.
EINE WARNUNG VOR UNINST=1¶
Wenn man local::lib in Kombination mit "make install UNINST=1"
benutzt, muss man vorsichtig sein ueber die Tatsache das der Prozess ueber die
Neuinstallation eine nicht ausreichende Sicherheit hat bezueglich wo er nun
installieren muss. Hierdurch mann es passieren das beim deinstallieren eines
Modul u.U. das globale Modul deinstalliert wird (wenn die Rechte vorhanden
sind) aber die neue Version nur in der lokalen Version installiert ist. Es ist
hier also sehr wichtig das man "make install UNINST=1" und
local::lib nur gleichzeitig benutzt wenn man sehr sicher darueber ist welche
Konsequenzen einem entgegenkommen.
EINSCHRAeNKUNGEN¶
Die Werkzeuge von perl, die benutzt werden um die Pakete zu installieren (die
sogenannte toolchain), sind leider nicht in der Lage sauber mit Verzeichnissen
umzugehen die Leerzeichen enthalten und koennen daher local::lib nicht direkt
in ein solches Verzeichnis installieren. Was du machen kannst ist
nach
der Installation von local::lib und der Module die du in deiner local::lib
haben willst, das gesamte Verzeichnis dahin zu bewegen. local::lib kann mit
dem Verzeichnis mit Leerzeichen umgehen. Bitte aufpassen das natuerlich eine
weitere Installation oder ein Erneuern von Paketen mit dem CPAN Programm nicht
mehr moeglich ist.
Die Shell Erkennung ist sehr primitiv. Derzeit ist es so das alles was
"csh" im Namen hat auch als C Shell eingeordnet wird, und alles
andere wird als Bourne Shell betrachet, ausser auf Win32 Systemen. Wenn die
"SHELL" Variable nicht gesetzt ist, eine Bourne Shell wird
angenommen.
Bootstrap ist leider ein Hack, und wird auf jedenfall CPAN.pm benutzen fuer
ExtUtils::MakeMaker, auch wenn CPANPLUS installiert ist.
Es setzt definitiv PERL5LIB, PERL_MM_OPT und PERL_MB_OPT neu und vernichtet
jeden Wert der vorher gesetzt war.
Es sollte vielleicht eine automatische Korrektur der CPAN Config machen, wenn
das nicht schon gemacht wurde.
"Patches Welcome" - Patches sind immer willkommen beim Autor oder den
anderen Mitwirkenden.
Auf Win32 Systemen werden die Umgebungsvariablen nicht direkt in die
Registrierung geschrieben damit sie auch nach dem Neustarten erhalten bleiben.
FEHLERANALYSE¶
Wenn du local::lib konfiguriert hast CPAN Module in deinem Home Verzeichnis zu
installieren, und du danach versuchst mit "cpan -i Foo::Bar" ein
Modul zu installieren, und dabei einen Fehler bekommst, wie: "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" und in der installationsausgabe steht
irgendwo ein Fehler der sagt "'INSTALL_BASE' is not a known MakeMaker
parameter name", dann hast du aus irgendeinem Grund dein neue Version von
ExtUtils::MakeMaker verloren.
Um dies zu korrigieren, einfach nochmal die bootstrapping Methode laufen lassen,
wie oben beschrieben.
Dann starte "rm -r ~/.cpan/build/Foo-Bar*"
Abschliessend dann nochmal mit "cpan -i Foo::Bar" installieren und die
Probleme sollten verschwunden sein.
UMGEBUNGSVARIABLEN¶
- SHELL
- COMSPEC
- local::lib schaut in die "SHELL"
Umgebungsvariable um die korrekten Kommandos zu der Shell Konfiguration
hinzuzufuegen.
Auf Win32 Systemen, "COMSPEC" wird auch analysiert.
SUPPORT¶
IRC:
Wir sind im Channel #local-lib auf dem Server irc.perl.org.
AUTOR DER UeBERSETZUNG¶
Torsten Raudssus <torsten@raudssus.de>
http://www.raudssus.de/
URHEBERRECHT¶
Copyright (c) 2007 - 2010 von den local::lib "AUTHOR" in local::lib
und "CONTRIBUTORS" in local::lib aufgelistet in local::lib.
LIZENZ¶
Diese Sammlung ist freie Software und kann unter der selben Lizenz verbreitet
werden wie Perl selber.