2009-02-12 11 views
56

Ich verwende einen gehosteten Linux-Rechner, so dass ich keine Berechtigungen habe, in das Verzeichnis /usr/lib zu schreiben.Wie kann ich ein CPAN-Modul in ein lokales Verzeichnis installieren?

Wenn ich versuche, ein CPAN-Modul zu installieren, indem die üblichen tun:

perl Makefile.PL 
make test 
make install 

Das Modul zu einem blib/lib/ Ordner extrahiert wird. Ich habe use blib/lib/ModuleName gehalten, aber es immer noch der Compiler sagt Modul kann nicht gefunden werden. Ich habe versucht, die .pm Datei in das lokale Verzeichnis zu kopieren und require ModuleName zu behalten, aber es gibt mir noch einen Fehler.

Wie kann ich ein Modul in ein anderes Verzeichnis installieren und verwenden?

+1

Im Allgemeinen Sie die Fehlermeldung zur Verfügung stellen sollen. "Ein Fehler" hilft nicht viel. – jrockway

+5

mögliches Duplikat von [Wie kann ich ein neues Perl-Modul ohne Installationsberechtigungen verwenden?] (Http://stackoverflow.com/questions/251705/how-can-i-use-a-new-perl-module-without-install) -permissions) – daxim

+0

WICHTIG .. einige Module verwenden Build.PL anstelle von Makefile.PL (oder wickeln es mit dem einen oder anderen), in einigen Fällen, (wie wenn die Tests laufen), Installation von/zu einem Pfad mit Leerzeichen in Das verwirrt den MANIFEST und führt dazu, dass die Tests fehlschlagen. Normalerweise geschieht dies nur, wenn RELEASE_TESTING eingestellt ist. Stellen Sie daher sicher, dass es sich nicht auf Ihrem Computer befindet. Wenn es MANIFEST-Fehler wie diese gibt, dann lauern wahrscheinlich andere, bleiben Sie bei Pfaden, die kein Leerzeichen haben (Leerzeichen, Tabulator, Unispace usw.) – osirisgothra

Antwort

32

Ich hatte ein ähnliches Problem, wo ich nicht einmal lokal installieren könnte :: lib

ich ein Installationsprogramm erstellt, das das Modul irgendwo in Bezug auf die .pl-Dateien

Das Installations geht so installiert:

perl Makefile.PL PREFIX=./modulos 
make 
make install 

Dann wird in der .PL Datei, die das Modul benötigt, die in ./ ist

use lib qw(./modulos/share/perl/5.8.8/); # You may need to change this path 
use module::name; 

Der Rest der Dateien (makefile.pl, module.pm, usw.) erfordert keine Änderungen.

Sie können die .pl-Datei aufrufen mit nur

perl file.pl 
+13

Es gibt keinen Grund, Ihr Skript zu ändern - setzen Sie PERL5LIB anstelle von mit 'use lib'. local :: lib kümmert sich darum für Sie - folgen Sie den Anweisungen und Sie sollten in Ordnung sein. – jrockway

+9

verwenden Sie INSTALL_BASE anstelle von PREFIX. –

+0

perl Makefile.PL INSTALL_BASE =/home/irraju/PadWalker gab mir diesen Fehler "'INSTALL_BASE' ist kein bekannter MakeMaker Parametername." Sogar die PREFIX-Option gab mir die gleiche – Ram

19

local::lib wird Ihnen helfen. Es wird "make install" (und "Build install") überzeugen, in ein Verzeichnis zu installieren, in das Sie schreiben können, und es wird perl mitteilen, wie Sie an diese Module gelangen.

Im Allgemeinen, wenn Sie ein Modul verwenden möchten, das sich in einem Verzeichnis blib/befindet, möchten Sie perl -Mblib ... sagen, wobei ... ist, wie Sie normalerweise Ihr Skript aufrufen würden.

+0

Ich ** empfehle ** wirklich, dass Sie local :: lib verwenden. Es kümmert sich um all die kleinen Details. – melo

+0

Leider schlägt es fehl, wenn ich versuche es zu installieren. – reinierpost

59

Weitere Antworten bereits auf Stackoverflow:

Von perlfaq8:


How do I keep my own module/library directory?

Wenn Sie Module bauen, sagen Perl, wo die Module zu installieren.

Für Makefile.PL-basierte Distributionen, verwenden Sie die Option, wenn INSTALL_BASE Makefiles zu erzeugen:

perl Makefile.PL INSTALL_BASE=/mydir/perl 

Sie können dies in Ihrer CPAN.pm Konfiguration so eingestellt, dass Module in Ihrem privaten Bibliotheksverzeichnis automatisch installieren, wenn Sie die Verwendung CPAN.pm Shell:

% cpan 
cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl 
cpan> o conf commit 

Für Build.PL-basierten Distributionen, verwenden Sie die Option --install_base:

perl Build.PL --install_base /mydir/perl 

Sie können CPAN.pm konfigurieren automatisch auch diese Option verwenden:

% cpan 
cpan> o conf mbuildpl_arg '--install_base /mydir/perl' 
cpan> o conf commit 
+1

Ich denke, du solltest Zitate hinzufügen: 'o conf mbuild_arg '--install_base/mydir/perl'' – Amro

+4

Ich denke, Leute, die Probleme finden, sollten den Beitrag bearbeiten. :) –

+0

Brian, eine Frage - Link, den Sie bereitgestellt haben, sagt, dass '--install_base' Parameter an' perl Build.PL' übergeben wird; aber 'mbuild_arg' ist über Argumente für'./Build'. Vielleicht meinst du 'mbuildpl_arg'? Oder gibt es einen Fehler in Perlfaq? – skaurus

3

Ich empfehle dringend Perlbrew. Sie können mehrere Versionen von Perl ausführen, Pakete installieren, Perl-Interna hacken, wenn Sie möchten, alle regulären Benutzerberechtigungen.

+0

Ist die Verbindung tot? – ceving

2

Für Makefile.PL-basierte Distributionen, verwenden Sie die Option, wenn INSTALL_BASE Makefiles zu erzeugen:

perl Makefile.PL INSTALL_BASE=/mydir/perl