Wie installiere ich ein Modul?
In der gesamten Anleitung wird als Beispiel das fiktive Modul Module::Name verwendet, so muss man gedanklich für sich selbst Module::Name durch das eigene Modul ersetzen.
Ich glaube mir fehlt da etwas ...
Fehlermeldung "Can't locate ... in @INC ..."
Gelegentlich erhält man beim Ausführen eines Programms eine Fehlermeldung, die in etwa
so beginnt:
Can't locate Module/Name.pm in @INC (@INC contains....
Das ist ein Anzeichen dafür, dass ein mit
use oder
require eingebundenes Modul nicht in Perls Suchpfad gefunden werden konnte. Das kann mehrere Ursachen haben. Eine mögliche Ursache ist, dass sich das aufgerufene Modul in einem Verzeichnis befindet, das nicht in @INC als Suchpfad mit aufgeführt ist, man also @INC um den Pfad erweitern muss.
Oder, und das ist der häufigere Fall, es ist nicht installiert.
Um ersteres auszuschließen, lässt sich mit Hilfe der Suchfunktion des Betriebssystems auf der Festplatte nach den Modul suchen. Als Suchbegriff verwendet man am besten den Dateinamen des Moduls.
Um an den Dateinamen zu kommen, trennt man den Modulnamen, in unseren Beispiel
Module::Name, jeweils an den zwei Doppelpunkten auf, so erhält man Verzeichnis- und Dateinamen-Anteil des Modulpfads, der letzte Teil ist der Dateiname und ist noch um ein
.pm zu erweitern.
In unseren Fall würden wir also nach der Datei
Name.pm suchen, diese sollte sich in einen Verzeichnis namens
Module finden lassen.
Hat man die Datei und das Verzeichnis gefunden, so kann man den Pfad vom
übergeordneten Verzeichnis den Array
@INC hinzufügen, am einfachsten geht das direkt im Skript.
#!/usr/bin/perl
use strict;
use warnings;
use lib '/Pfad/zum/Verzeichnis'; # fuegt den Pfad /Pfad/zum/Verzeichnis dem @INC hinzu
use Module::Name; # unser Modul einbinden
# ...
Fehlermeldung "Can't locate loadable object ... in @INC ..."
Bei Modulen mit C-Anteil, die nicht korrekt installiert wurden sind, kommt diese Fehlermeldung:
Can't locate loadable object for module Module::Name in @INC...
Man kann auch vor dem Ausführen eines Programmes oder nur zum Sichergehen mit folgendem Befehl
testen ob ein Modul vorhanden ist:
perl -e "use Module::Name;"
Sollte das die o.g. Fehlerausschrift ergeben, wird es Zeit das Modul zu installieren.
Und wie installiere ich jetzt das Modul?
Nachfolgend werden die gängigsten Varianten beschrieben. Dabei sind die zuerst genannten Methoden
generell empfehlenswerter als die weiter hinten genannten.
Kurze Übersicht
- Betriebssystem Unix, Linux
- am einfachsten Paketmanager des Betriebssystems
- mit CPAN.pm (darauf achten, dass für Module mit C-Anteil der gcc o.ä installiert ist)
- Betriebssystem Windows
- Perl-Distribution ActiveState?
- Perl-Distribution Strawberry Perl
Für Details siehe die ausführlicheren Beschreibungen weiter unten.
(Noch zu ergänzen: Cygwin? ...)
Statt CPAN.pm lässt sich immer auch eine manuelle Installation ausführen, indem man einfach die Schritte macht, die CPAN.pm machen würde (also auch ggfs. Abhängigkeiten selber runterlädt). Man sollte aber wissen, was man tut und die richtigen Parameter übergeben.
Grundsätzlich sind die
bei einer Perl-Distribution oder
im Betriebssystem vorgesehenen Möglichkeiten vorzuziehen,
weil das installierte Paket direkt unter die Aufsicht des Paketmanagements gestellt wird, was sich nicht nur um die
Abhängigkeiten kümmert, sondern auch spätere Aktualisierungen übernehmen kann. Außerdem ist meist so sicher gestellt,
dass die installierte Version des Moduls mit den anderen Modulen der Installation harmoniert.
Wenn man diese Möglichkeit nicht hat oder z.B. bestimmte Modulversionen oder Module installieren möchte,
die nicht von der Paketverwaltung angeboten werden, dann sollte man auf die Perl-eigenen Möglichkeiten wie die Kernmodule
CPANPLUS und
CPAN zurückgreifen, bevor man eine
manuelle Installation in Betracht zieht.
Mit dem Paketmanager für ActiveState Perl (für Windows und andere Systeme mit ActiveState Perl)
Online mit PPM
Die wahrscheinlich meistgenutzte Perl-Distribution unter Microsoft Windows,
ActiveState Perl,
bietet ein eigenes Programm zur Installation und Verwaltung von Perl-Modulen, den Modulmanager
ppm.
Dieser Modulmanager greift nicht auf die Original-Quellpakete im CPAN zu, sondern auf fertig übersetzte
und speziell für ActiveState Perl erstellte Pakete, die sich in sogenannten
Repositories befinden.
Das Standard-Repository bei ActiveState ist bereits voreingestellt.
Zur Installation eines Moduls muss man also nur eine Onlineverbindung herstellen
und über die DOS-Shell (Eingabeaufforderung) den Paketmanager
ppm
aufrufen:
C:\Perl\bin> ppm
Nachdem sich der Paketmanager gemeldet hat, kann man mit
ppm> install Module::Name
einfach das Modul
Module::Name installieren. Sollte der Modulname nicht bekannt sein, dann kann man mit
ppm> search Module::Name
auch erst einmal nach entsprechenden Modulen suchen.
Auf der Seite
http://ppm.activestate.com/PPMPackages/zips/8xx-builds-only/Windows/
gibt es auch eine Liste aller Module von ActiveState für Perl 8.x.x.
Hat man hier sein Modul gefunden, so kann man es direkt mit
ppm> install Module::Name
installieren.
Beispiel:
ppm> install PAR
Manchmal ist das gewünschte Modul im Default-Repository bei ActiveState nicht dabei. Dann kann man
ein anderes PPM-Repository verwenden. Aus ppm heraus geschieht dies z.B. mit dem folgenden Aufruf:
ppm> rep add theoryx5 http://theoryx5.uwinnipeg.ca/cgi-bin/ppmserver?urn:/PPMServer58
Eine Liste von bekannten PPM-Repositories kann man hier finden:
http://search.cpan.org/~podmaster/PPM-Repositories/
(einfach im Sourcecode des Moduls schauen). Oder auch hier:
http://theoryx5.uwinnipeg.ca/cgi-bin/ppm-request
Auf der letzteren Seite kann man sich sogar fehlende PPMs machen lassen.
Im Wiki von win32.perl.org ist eine umfangreichere Liste mit PPM-Repositories zu finden:
http://win32.perl.org/wiki/index.php?title=PPM_Repositories
Offline mit PPM (für Windows und ActiveState Perl)
Vielleicht hat man aber an dem Rechner, auf dem Perl installiert ist, keinen Internetzugang. Dann
lädt man sich die Moduldateien von einem anderem Rechner, aus einem der folgenden Verzeichnisse "von Hand herunter":
und installiert später auf dem gewünschten Rechner mit
c:\>ppm install modulname.ppd
#Paketmanager
Mit dem Paketmanager des Betriebssystems (für Unix und Linux)
Viele Linux-Distributionen und BSDs haben für alle wichtigen Perl-Module bereits fertige Pakete.
Ein großer Vorteil bei Benutzung eines Paketmanagers ist folgender: Viele andere
Pakete des Paketmanagers haben Abhängigkeiten auf Perl-Module. Wenn man die Module
nicht mit dieser Methode installiert, so kann es zu Mehrfachinstallationen oder
Problemen kommen, wenn man später solch ein Paket mit Abhängigkeiten installiert.
Es folgen nähere Anleitungen für die einzelnen Paket-Manager:
Debian GNU/Linux, Ubuntu und andere Verwandte
Im Allgemeinen lassen sich die von der Distribution angebotenen GUI-Tools
wie
Adept oder
Synaptic gut für die Suche und Installation von Perl-Paketen nutzen.
Die Regeln für das APT-Paketmanagement von Debian führen aber dazu, dass die Pakete manchmal
etwas schwer zu finden sind. Wenn man ein Perlmodul namens
Xxx::
Yyyyy sucht,
dann hat der Name des zugehörigen Pakets in den meisten Fällen die Form
libxxx-yyyyy-perl.
Wer keine GUI zur Verfügung hat, kann dies aber auch von der Kommandozeile aus tun,
wie im Folgenden beschrieben.
apt-cache, apt-get und aptitude
Beispiel: Es soll das Modul
HTML::Parser installiert werden. Wir suchen also nach einem Paket
mit dem Namen lib
html-parser-perl:
$ apt-cache search libhtml-parser-perl
libhtml-parser-perl - Eine Modul-Sammlung zum Parsen von HTML-Dokumenten
Auch wenn der Name anders lautet, lassen sich die Pakete mit
apt-cache finden.
Hier suchen wir die Module Tk und Curses:
$ apt-cache search Tk | grep perl
...
perl-tk - Perl-Modul, ermöglicht Zugriff auf die Tk-Grafikbibliothek
...
$ apt-cache search Curses | grep perl
...
libcurses-perl - Curses-Schnittstelle für Perl
Die gefundenen Pakete mit den Perlmodulen Tk und Curses können dann (als Benutzer "root" oder mittels
sudo)
mit
apt-get oder
aptitude installiert werden.
$ sudo aptitude install perl-tk
...
$ sudo apt-get install libcurses-perl
...
Eine Übersicht über vorhandene Module kann man mit
dpkg erhalten:
$ dpkg -l 'lib*-perl'
oder durch Filtern der Liste mit verfügbaren Paketen:
$ egrep '^Package: lib[a-z-]+-perl' /var/lib/dpkg/available
(Letzteres funktioniert nur, wenn
/var/lib/dpkg/available immer aktuell gehalten wird.)
dh-make-perl
Wenn ein Modul nicht vorhanden ist, kann man auch mit
dh-make-perl selber ein Debian-Paket bauen.
Dieses Skript kann ein Modul direkt von CPAN herunterladen und ein deb-Paket daraus bauen:
$ dh-make-perl --cpan Module::Name --build
Das erzeugte deb-Paket lässt sich dann mit
# dpkg -i libmodule-name-perl
bzw.
$ sudo dpkg -i libmodule-name-perl
installieren.
Gentoo Linux
Pakete Tk und Curses installieren:
# emerge perl-tk
# emerge Curses
Übersicht über vorhandene Module:
# ls /usr/portage/dev-perl/
Da es eine sehr routinemäßige Arbeit ist, Ebuilds (so heißen bei Gentoo die Pakete) für CPAN-Module
zu erstellen, hat Gentoo vor kurzem eine elegantere Möglichkeit gefunden, CPAN-Module zu installieren:
Das Script
g-cpan kann beliebige CPAN-Module inclusive Abhängigkeiten installieren. Nach der Installation
sieht es aus, als hätte man einen ganz normalen Ebuild installiert, d. h. man kann ihn auch sauber
wieder unmergen (deinstallieren). Die mit
g-cpan installierten Module leben nach der Installation in der Kategorie
perl-gcpan,
sind also im Verzeichnis
/var/db/pkg/perl-gcpan einsehbar.
g-cpan installieren (nur einmal erforderlich):
# emerge g-cpan
Damit nun ein Modul installieren:
# g-cpan -i Module::Name
Intern benutzt
g-cpan sowohl das Modul
CPAN als auch Portage-Funktionen.
SuSE Linux
Auch SuSE Linux liefert eine große Auswahl an Perl-Modulen mit. Sie lassen sich leicht in
YaST finden.
FreeBSD
Viele Pakete findet man im
Ports-System von FreeBSD. Man hat die Wahl zwischen bereits kompilierten Paketen (
packages) oder den
ports, die noch übersetzt werden müssen.
Pakete Tk und Curses installieren:
Als Packages (root-Rechte sind notwendig):
# pkg_add -r p5-Tk
# pkg_add -r p5-Curses
Als Ports (geht auch als Normal-User, bei Bedarf wird nach dem root-Passwort gefragt):
$ cd /usr/ports/x11-toolkits/p5-Tk && make install
$ cd /usr/ports/devel/p5-Curses && make install
Mit dem CPAN-Modul (direkt über Perl, alle OS, unter Windows z.B. bei Strawberry Perl)
Diese Variante installiert Module direkt über Perl. Sie setzt allerdings auch voraus, dass man auf seinem
System "zu Hause" ist. Unter allen Systemen bedingt sie, wie auch bei der
manuellen Installation, ein installiertes
make Programm.
Für diese Variante wird eine bestehende Onlineverbindung benötigt.
Die CPAN-Shell
Das Modul
CPAN.pm ist Teil der Perl-Standarddistribution und stellt Funktionen zur Verfügung, mit denen alle Module
gesucht und installiert werden können, die im Comprehensive Perl Archive Network (CPAN) zu finden sind.
Die CPAN-Shell wird über den folgenden Befehl in der Kommandozeile aufgerufen:
$ perl -MCPAN -e shell
Beim ersten Aufruf werden einige Fragen zu vorhandenen Hilfsprogrammen (z.B. ftp- und http-Clients,
Programm zum Entpacken von gzip- und tar-Archiven etc.), zur Netzwerkanbindung und zu gewünschten
CPAN-Mirrors gestellt. Wenn diese alle beantwortet wurden, ist die Shell bereit, Befehle anzunehmen, z.B. zur Installation
eines Paketes:
cpan> install Module::Name
Hier wird der Modulname erwartet wie er später im
use verwendet wird,
nicht der physische Dateiname.
Wenn man in der Konfiguration nichts anderes einstellt, dann kümmert sich das CPAN-Modul selbsttätig um
Abhängigkeiten zwischen Modulen, sodass evtl. automatisch weitere benötigte Module installiert werden.
Installation ohne Shell
Man muss nicht jedes Mal erst die CPAN-Shell starten, um ein Modul zu installieren. Man kann den install-Befehl auch direkt
beim Start des Programms aufrufen. Mit
$ perl -MCPAN -e "install Module::Name"
erfolgt direkt die Aufforderung zum Laden und Installieren des Modules
Module::Name.
Wenn man meint, das Modul trotz Fehlern im Testlauf installieren zu wollen, hilft
$ perl -MCPAN -e 'force install Module::Name'
weiter.
Mit CPAN.pm Version 1.77 kann man auch
$ perl -MCPAN -e 'notest install Module::Name'
schreiben, dann wird der Testlauf übersprungen.
Modul mit CPAN.pm in ein eigenes Verzeichnis installieren
Auch das geht mit dem CPAN-Modul, man muss nur die richtigen Parameter eingeben.
Siehe
http://search.cpan.org/~andk/CPAN-1.87/lib/CPAN.pm#mkmyconfig
$ cpan
cpan shell -- CPAN exploration and modules installation (v1.87)
ReadLine support enabled
cpan> mkmyconfig
...
Are you ready for manual configuration? [yes] no
...
cpan> o conf makepl_arg "INSTALL_BASE=dein/lib/verzeichnis"
Damit wird eine eigene
~/.cpan/CPAN/MyConfig.pm erstellt.
Bevor es mkmyconfig gab:
Man kopiere CPAN/Config.pm ins eigene cpan-verzeichnis und ersetze alle Vorkommnisse von
'root' durch das home-Verzeichnis. Hier ein Beispiel:
$ cp /usr/lib/perl5/5.8.5/CPAN/Config.pm $HOME/.cpan/CPAN/MyConfig.pm
$ perl -pi -e's#/root/#$ENV{HOME}/#g' $HOME/.cpan/CPAN/MyConfig.pm
$ cpan
cpan shell -- CPAN exploration and modules installation (v1.8)
ReadLine support enabled
cpan> o conf makepl_arg "INSTALL_BASE=dein/lib/verzeichnis"
Alternativ benutze man die
manuelle Variante.
Mit dem CPANPLUS-Modul (direkt über Perl, alle OS)
Das Perlmodul
CPANPLUS ist eine Neufassung der Funktionalität des Modules CPAN.pm der Standarddistribution und ist ab Perl 5.9 im Standard dabei.
Mit
$ perl -MCPANPLUS -e "install Module::Name"
erfolgt die Aufforderung zum Laden und Installieren des Modules.
Manuelle Installation (Unix/Linux, Windows und andere)
Nachdem man im
CPAN ein passendes Modul gefunden und
heruntergeladen hat, wird es entpackt und nach dem Wechsel in das neu entstandene Verzeichnis
mit folgender Befehlskombination installiert:
$ perl Makefile.PL
$ make
$ make test
$ make install
Falls das Modul die Datei Build.PL mitbringt, kann man es auch folgendermaßen installieren:
$ perl Build.PL
$ ./Build
$ ./Build install
Die erste Methode ist zwar auf *nix-Betriebssystemen kein Problem, aber auf einem Windows-System nicht ohne
weiteres ausführbar, da das benötigte
make standardmäßig nicht zur Verfügung steht. Dieses Manko hat die Perldistribution
Strawberry Perl nicht, da es eine komplette Entwicklungsumgebung mitliefert.
Wer diese Distribution nicht installieren möchte, muss sich
make und einen Compiler gesondert beschaffen.
Man kann es aber unter folgenden Adressen kostenlos bekommen:
Im kostenlosen Paket des Borland C++-Compilers ist es ebenfalls enthalten.
Ein weiteres Problem unter Windows stellen Module dar, die C-Code enthalten und eines Compilers
bedürfen. Die Erläuterungen zum Installieren eines solchen Modules gehen über den Rahmen dieses
HOWTOs hinaus. Nur soviel: Neben dem Borland-Compiler gibt es auch ein sehr aktives Open-Source-Projekt
um den GNU-Compiler mit einer kompletten Entwicklungsumgebung:
Modul manuell in ein eigenes Verzeichnis installieren
Wenn keine Rechte bestehen, Module in die systemweiten Bibliothekspfade von Perl zu installieren, dann
kann man auch bei der manuellen Installation einen eigenen Zielpfad angeben.
local::lib
Hier steht eine kurze Anleitung zu local::lib:
http://www.perl-uwe.com/2010/12/day-12-installing-cpan-modules-locally.html
manuell
Die Befehlskombination ändert sich dabei nur leicht:
$ perl Makefile.PL INSTALL_BASE=/absoluter/Pfad/zum/eigenen/Verzeichnis/lib
$ make
$ make test
$ make install
Im Skript muss dann auch der Zielpfad angegeben werden:
use lib qw(/absoluter/Pfad/zum/eigenen/Verzeichnis/lib/...);
Modul ohne Shell-Zugang in ein eigenes Verzeichnis installieren
Die Installation eines Perl-Moduls geht auch wunderbar, wenn man keinen direkten Shell-Zugang hat, sondern nur ftp und http.
Man packe den Code für die
manuelle Installation in ein CGI-skript
und ein paar system()-Befehle und führe es aus -
make/nmake sollte normalerweise auf dem Zielsystem vorhanden sein.
Die richtigen Schreibrechte müssen natürlich vorher gesetzt werden, evtl. muss das Zielverzeichnis
schreibbar für den
wwwuser o.ä. sein.
Das Programm
CGIpan (
http://sourceforge.net/projects/cgipan/) erledigt das mehr oder weniger automatisch.
(
Bitte um Feedback an TinaMueller, da das ganze noch nicht großartig getestet ist.)
Wenn Module Abhängigkeiten haben, dann werden diese meistens schon während der Kompilierung und Installation benötigt.
In diesem Fall sollte man die Environment-Variable
$PERL5LIB setzen.
Die erweiterte Befehlsfolge sieht dann so aus:
in einer sh/bash/ksh/zsh:
$ export PERL5LIB=/absoluter/Pfad/zum/eigenen/Verzeichnis/lib
in einer csh/tcsh:
$ setenv PERL5LIB /absoluter/Pfad/zum/eigenen/Verzeichnis/lib
Windows-Kommandozeile (man korrigiere mich bitte!):
$ set PERL5LIB=C:/absoluter/Pfad/zum/eigenen/Verzeichnis/lib
alle:
$ perl Makefile.PL INSTALL_BASE=/absoluter/Pfad/zum/eigenen/Verzeichnis/lib
$ make
$ make test
$ make install
Modul-Datei(en) manuell kopieren
Es besteht manchmal auch die Möglichkeit, bei einer Fehlermeldung wie
Can't locate Module/Name.pm in @INC (@INC contains....
die Datei
Name.pm einfach in das Verzeichnis
Module im Installationsbaum zu kopieren. Diese
Variante funktioniert aber nur für wenige
Module, die eben wirklich nur aus dieser einen Datei bestehen und nur aus Perl-Code bestehen, also keinen C-Anteil besitzen.
Man spart sich eine Menge Arbeit, wenn man einem der vorigen Vorschläge folgt und ein Modul sauber
installiert.
Für einige häufig gebrauchte Module wie z.B.
HTML::Entities funktioniert diese Variante aber. Einfach
ein Verzeichnis
/mein/perl/HTML erstellen und Entities.pm aus
http://search.cpan.org/dist/HTML-Parser/ dorthin kopieren. Dann im Skript:
use lib '/mein/perl';
use HTML::Entities;
Wenn du also Webspace hast, auf dem noch nicht mal CGIpan funktioniert (siehe
oben), dann musst
du diese Möglichkeit benutzen.
Für Module wie z.B. DBI klappt das ganze aber nicht mehr.
Auf dem eigenen Rechner oder dort, wo man einen Account hat (Root oder einfacher User), sollte man eine der Möglichkeiten weiter oben in Betracht ziehen.