Perlo modulių įdiegimas

Čia pateikiu dar vieno PerlMonks straipsnio santrauką lietuvių kalba. Šį kartą apie tai kaip įdiegti Perlo modulius.

Paprasti dalykai

Daugumą modulių galima rasti CPAN. Jie būna pateikiami taip vadinamuose tarballuosetar bylose, suarchyvuotose gzip programa. Modulio kodas būna atskiroje direktorijoje, tad tar šią direktoriją sutraukia į vieną bylą, o gzip šią bylą suarchyvuoja. tar sukurtos bylos turi plėtinį .tar, o gzip.gz, tad dažniausiai modulio bylos pavadinimas atrodys kažkaip taip:

Kazkoks-Modulis-0.01.tar.gz

Pirmoji bylos vardo dalis yra modulio pavadinimas, po to eina modulio versijos numeris ir plėtinys .tar.gz. Išarchyvuoti šį modulį galima konsolės komanda:

tar -zxvf Kazkoks-Modulis-0.01.tar.gz

Visos *nix sistemos turi programą tar. Windows‘uose galite naudoti CYGWIN (unix aplinka Windowsams), tačiau standartinės archyvavimo programos kaip WinZip irgi turėtų susitvarkyti su šia užduotimi.

Jei jau išarchyvavote Perlo modulį jums reikės jį paruošti ir įdiegti. Nueikite į direktoriją, į kurią išarchyvavote modulį ir ieškokite bylos Makefile.PL. Ją suradę suveskite konsolėje šias komandas:

perl Makefile.PL
make
make test
make install

Viskas turėtų praeiti gražiai ir be klaidų, jeigu ne, tai skaitykite žemiau. Windows sistemoje jums reikės programėlės pavadinimu nmake. Ją galima parsisiųsti iš Microsoft per FTP arba per HTTP. Parsisiuntus ją reikia irgi įdiegti. Įsitikinkite kad nmake yra programų kelyje ir yra pasiekiamas.

Kai jau įdiegėte nmake, įdiekite ir perlo modulį DOS lange rašydami:

perl Makefile.PL
nmake
nmake test
nmake install

Jeigu viskas gerai, tai sveikinu. Jei ne, tai skaitykite toliau.

Dažniausios problemos

Gaunu klaidos pranešimą Warning: prerequisite Foo::Bar failed to load: Can't locate foo/bar.pm in @INC

Kai kuriems moduliams reikia kitų modulių. Jie yra priklauomi nuo kitų modulių funkcionalumo. Šios priklausomybės yra aprašomos Makefile.PL eilutėje:

'PREREQ_PM' => { Foo::Bar => 1.5 }

Tai nurodo kad šiam moduliui reikia ne senesnės kaip 1.5 modulio Foo::Bar versijos. Prieš įdiegdami modulį, įdiekite modulius kurių reikės naujajam moduliui.

Gaunu klaidą Can't find make

Gali būti kad make nėra jūsų sistemoje. Įdiekite make (arba Windowsuosenmake).

make/nmake neranda kai kurių bylų

Kai paleidžiate make/nmake, jis ieško bylos pavadinimu MANIFEST, kurioje surašytos visos bylos kurios turėtų būti modulyje. Jei kurios nors iš jų nėra, gausite panašią klaidą:

$ make
Checking if your kit is complete...
Warning: the following files are missing in your kit:
Foo.bar
Please inform the author.

Turbūt dėl to reiktų kaltint modulio autorius.

make test gražina klaidas

Perlo moduliai turėtų veikti vienodai visose operacinėse sistemose, bet kartais taip neatsitinka. Modulių autoriai dažnai prideda visokių testų, kad įsitikinti jog modulis veiks tiap kaip turėtų. Kai kurios klaidos kurias grąžina make test yra nežymios, tačiau jos gali rodyti kad su šiuo moduliu gali būti daug problemų. Jei gaunate tikrai daug klaidų, tai turbūt nereiktų įdiegti šio modulio.

Sako, kad neturiu pakankamai teisių įdiegti šį modulį

Jeigu neturite root teisių, tai jums nepavyks įdiegti modulių standartinėse įdiegimo vietose. Dažniausiai gausite tokias klaidas:

$ make install
Warning: You do not have permissions to install into 
/usr/local/lib/perl5/site_perl/5.005/i386-freebsd at 
/usr/libdata/perl/5.00503/ExtUtils/Install.pm line 62.
mkdir /usr/local/lib/perl5/site_perl/5.005/CGI/Simple: 
Permission denied at /usr/libdata/perl/5.00503/ExtUtils/Install.pm line 120
*** Error code 2

Nesunku išspręsti šią problemą. Įdiekite modulius į savo vietinę namų direktoriją. Tam tikslui pasidarykite direktoriją ~/lib

# pirma nueikite į savo namų direktoriją
$ cd ~
# dabar sukurkite katalogą lib
$ mkdir lib

Dabar paleisdami perl Makefile.PL nurodykite kur įdiegti modulį:

perl Makefile.PL LIB=~/lib

tam kad galėtumėte naudotis taip įdiegtu moduliu jums teks savo programose pridėti ~/lib prie @INC. Štai paprasčiausias vartojimo būdas:

#!/usr/bin/perl -w
use strict;
# pridedam ~/lib direktoriją prie @INC
use lib '/usr/home/jusu_namu_direktorija/lib/';
# toliau kaip įprasta
use Kazkoks::Modulis;

Įrankiai palengvinantys Perlo modulių įdiegimą

Yra keletas įrankių, palengvinančių Perlo modulių įdiegimo procesą. Tiesa, gali būti sudėtinga priversti juos veikti, jei naudojatės proksiais ar ugniasienėmis.

CPAN.pm

Tai Perlo modulis, skirtas įdiegti kitiems Perlo moduliams. Lengviausia jį naudoti štai taip:

perl -MCPAN -e "shell"

tai paleidžia interaktyvų apvalkalą. Sekite instrukcijas.

PPM

PPM yra ActieState programa, kuri įdiegia specialias CPAN modulių versijas aprašytas XML formalu PPD bylose. Tiesiog parašykite DOSo lange ppm jei turite įdiegtą ActivePerl. Toliau parašykite help ir skaitykite instrukcijas.

Perlo modulių su C kodu įdiegimas

Sudėtingiausia yra įdiegti modulius, kurie yra rašyti C kalba. Tam reikia turėti kompiliatorių – geriausia gcc. Dažniausiai UNIX sistemose šis kompiliatorius jau būna pagal nutylėjimą, o Windowsams jį geriausia parsisiųsti tiesiai iš http://www.gnu.org/software/gcc/gcc.html. Kompiliuoti modulius Windowsuose yra sudėtinga. Dažnai tik cygwin ir gcc tam neužtenka. Lengviausia yra rasti jau sukompiliuotus modulius (per PPM arba pas modulio autorių). Tiesa, jei naudojatės Windows ir klausiate autoriaus patarimo kompiuojant jo modulius galite kartais tikėtis ir atsakymo „įsigyk normalią operacinę sistemą“…

Comments Closed

2 Comments

  1. dar viena problema buna labai daznai kompiliacijos metu .. po defaultu dazniausiai nebuna bibliotekos libperl-dev kuri daznai buna reikalinga tada jeigu "esame po debianu" aptgetiname arba rankutemis dirbame ;-]

  2. Tai taip sudėtinga? Aš nei perlo programuotojas nei ką, kažkokia programa sako "man reikia XMLRPC::Transport::HTTP". Ką man žinoti, kas tai per daiktas…

    $ su –

    # cpan

    cpan> install XMLRPC::Transport::HTTP

    ir turim modulį surastą, parsiųstą, sukompiliuotą ir įdiegtą. Paspaudžiam Retry mygtuką ir programa veikia. Žinojau tik tiek, kad yra toks daiktas kaip CPAN, visa kita beveik intuityvu. Na gal tik Debian'e taip =]

Comments are closed.