Manual installation of a Perl Module

前端 未结 3 888
孤独总比滥情好
孤独总比滥情好 2020-12-03 03:28

I have downloaded the module Digest::SHA1 and extracted it to a directory (../Digest-SHA1-2.13/) , then copied all the SHA1.* files into (../Digest-SHA1-2.13/Di

相关标签:
3条回答
  • 2020-12-03 03:53

    Any reason why you can't use local::lib?

    create and use a local lib/ for perl modules with PERL5LIB

    It is basically a tool to help you use a private (non-systemwide) directory as your Perl library directory.

    After setting it up, you could run a command like

    perl -MCPAN -Mlocal::lib -e 'CPAN::install(Algorithm::CouponCode)'
    

    and then your script would use your locally installed copy of Algorithm::CouponCode).

    0 讨论(0)
  • 2020-12-03 03:58

    Use this recipe for manually installing perl modules:

    tar zxf Digest-SHA1-2.13.tar.gz
    cd Digest-SHA1-2.13
    perl Makefile.PL
    make
    make test
    make install
    

    Note that some distributions will have a Build.PL file instead of Makefile.PL. In that case use this recipe:

    tar zxf ...
    cd ...
    perl Build.PL
    ./Build
    ./Build test
    ./Build install
    

    (You may be able to get by with just running make install and ./Build install.)

    If you need to alter the installation dir then use:

    perl Makefile.PL INSTALL_BASE=...
    

    or

    perl Build.PL --install_base ...
    

    depending on the kind of module.

    For more info see the perldoc for ExtUtils::MakeMaker::FAQ and Module::Build

    0 讨论(0)
  • 2020-12-03 04:04

    There are two kinds of Perl module: pure-Perl and XS. Pure-Perl modules are written entirely in Perl, and can usually be installed just by copying the .pm files to an appropriate directory. XS modules are written in both Perl and C (XS is processed into C code by the ExtUtils::ParseXS module) and require a C compiler to install them.

    As dsolimano said, the easiest way to install Perl modules for the system Perl when you don't have root access is to use local::lib. (You could do the same things that local::lib does yourself, but why bother?)

    The reason why Digest::SHA1 works by itself but not when you're using Algorithm::CouponCode is that the system Perl already has version 2.11 of Digest::SHA1 installed. When you use -I ../Digest-SHA1-2.13/Digest, then use Digest::SHA1 picks up the Perl code from ../Digest-SHA1-2.13/Digest, but the shared library that would be built from the XS code is not in the corresponding location.

    0 讨论(0)
提交回复
热议问题