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.

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 libhtml-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)

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.

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.

UtilFaqSubForm edit

Titel Wie installiere ich ein Modul?
Autor JoergWestphal & perl-community, Relais
Bereich FaqModule
Tags Modul, installieren
Edit | Attach | Print version | History: r49 | r46 < r45 < r44 < r43 | Backlinks | View wiki text | Edit WikiText | More topic actions...
Topic revision: 2010-01-28, ReneeBaecker
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um Rückmeldung.