zoukankan      html  css  js  c++  java
  • perl模块终极解决方案--转载

    不管别人怎么说,反正我是非常喜欢perl语言的!

    也会继续学习,以前写过不少perl模块的博客,发现有点乱,正好最近看到了关于local::lib这个模块。

    居然是用来解决没有root权限的用户安装,perl模块问题的!

    首先说一下,如果是root用户,模块其实没有问题,直接用cpan下载器,几乎能解决所有的模块下载安装问题!

    但是如果是非root用户,那么就麻烦了,很难用自动的cpan下载器,这样只能下载模块源码,然后编译,但是编译有个问题,很多模块居然是依赖于其它模块的,你的不停地下载其它依赖模块,最后才能解决,特别麻烦

    但是,只需要运行下面的代码:

    wget -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib
    eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
    echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile
    echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile

    就能拥有一个私人的cpan下载器,~/.profile可能需要更改为.bash_profile, .bashrc, etc等等,取决于你的linux系统!

    然后你直接运行cpanm Module::Name,就跟root用户一样的可以下载模块啦!

    或者用下面的方式在shell里面安装模块,其中ext是模块的安装目录,可以修改

     perl -MTime::HiRes -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Time::HiRes;
    perl -MFile::Path -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext File::Path;
    perl -MFile::Basename -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext File::Basename;
    perl -MFile::Copy -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext File::Copy;
    perl -MIO::Handle -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext IO::Handle;
    perl -MYAML::XS -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext YAML::XS;
    perl -MYAML -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext YAML;
    perl -MXML::Simple -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext XML::Simple;
    perl -MStorable -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Storable;
    perl -MStatistics::Descriptive -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Statistics::Descriptive;
    perl -MTie::IxHash -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Tie::IxHash;
    perl -MAlgorithm::Combinatorics -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Algorithm::Combinatorics;
    perl -MDevel::Size -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Devel::Size;
    perl -MSort::Key::Radix -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Sort::Key::Radix;
    perl -MSort::Key -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Sort::Key;
    perl -MBit::Vector -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext Bit::Vector;
    perl -M"feature 'switch'" -e 1 > /dev/null 2>&1 || cpanm -v --notest -l ext feature;

    下面是解释为什么这样可以解决问题!!!

    What follows is a brief explanation of what the commands above do.

    wget -O- http://cpanmin.us fetches the latest version of cpanm and prints it to STDOUT which is then piped to perl - -l ~/perl5 App::cpanminus local::lib. The first - tells perl to expect the program to come in on STDIN, this makes perl run the version of cpanm we just downloaded.perl passes the rest of the arguments to cpanm. The -l ~/perl5 argument tells cpanm where to install Perl modules, and the other two arguments are two modules to install. [App::cpanmins]1 is the package that installs cpanmlocal::lib is a helper module that manages the environment variables needed to run modules in local directory.

    After those modules are installed we run

    eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`

    to set the environment variables needed to use the local modules and then

    echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile

    to ensure we will be able to use them the next time we log in.

    echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile

    will hopefully cause man to find the man pages for your local modules.

    这种类似的问题被问的特别多!

    There's the way documented in perlfaq8, which is what local::lib is doing for you.

    It's also a frequently asked StackOverflow question:

    其实可以手动下载local::lib, 这个perl模块,然后自己安装在指定目录,也是能解决模块的问题!

    下载之后解压,进入:

     $ perl Makefile.PL --bootstrap=~/.perl  ##这里设置你想把模块放置的目录
     $ make test && make install
     $ echo 'eval $(perl -I$HOME/.perl/lib/perl5 -Mlocal::lib=$HOME/.perl)' >> ~/.bashrc

    等待几个小时即可!!!

    添加好环境变量之后,就可以用

    perl -MCPAN -Mlocal::lib -e 'CPAN::install(LWP)'
    这样的模式下载模块了,所有的模块都会存储在$HOME/.perl/lib/perl5 里面!!!
    如果是新写的perl程序,需要在开头加入 use local::lib;   
    # sets up a local lib at ~/perl5才能使用该模块!  非常重要,非常重要,非常重要!!!

    其实你也可以直接打开 ~/.bashrc,然后写入下面的内容

    PERL5LIB=$PERL5LIB:/PATH_WHERE_YOU_PUT_THE_PACKAGE/source/bin/perl_module; export PERL5LIB
    可以把perl模块安装在任何地方,然后通过这种方式去把模块加载到你的perl程序!
  • 相关阅读:
    IM开发快速入门(一):什么是IM系统?
    IM群聊消息的已读未读功能在存储空间方面的实现思路探讨
    Android保活从入门到放弃:乖乖引导用户加白名单吧(附7大机型加白示例)
    IM开发干货分享:我是如何解决大量离线消息导致客户端卡顿的
    LetsTalk_Android中引导用户加入白名单图-2
    LetsTalk_Android中引导用户加入白名单图
    基于Go的马蜂窝旅游网分布式IM系统技术实践
    2020年了,Android后台保活还有戏吗?看我如何优雅的实现!
    微信团队分享:极致优化,iOS版微信编译速度3倍提升的实践总结
    史上最通俗,彻底搞懂字符乱码问题的本质
  • 原文地址:https://www.cnblogs.com/nkwy2012/p/7999032.html
Copyright © 2011-2022 走看看