如何安装perl模块

简介: 由于生物信息早期最多用的语言是perl,因此不可避免就要用别人的perl脚本或者基于perl的项目来处理数据。使用perl脚本和使用其他编程语言的脚本没啥不同,毕竟你只要传入参数,它就能给你结果。

由于生物信息早期最多用的语言是perl,因此不可避免就要用别人的perl脚本或者基于perl的项目来处理数据。

使用perl脚本和使用其他编程语言的脚本没啥不同,毕竟你只要传入参数,它就能给你结果。因此对于我们这些不用perl写脚本,只需要调用的人而言,唯一要学会的事情就是**如何安装perl的模块”。

关于perl模块安装,最古老的方法就是使用perl -MCPAN -e shell或者是cpan(两者等价),这也是我最先接触的方法,这里介绍如何使用local::libcpanm实现非root权限安装perl模块。

使用系统自带的perl

安装任何软件最怕遇到的问题就是权限问题,因此我们需要先安装local::lib,使得我们能够将perl模块安装到任何地方,简单的说就是安装到我们的家目录下

第一步,下载源代码进行编译安装

wget https://cpan.metacpan.org/authors/id/H/HA/HAARG/local-lib-2.000024.tar.gz
tar xf local-lib-2.000024.tar.gz
cd local-lib-2.000024
perl Makefile.PL --bootstrap=~/opt
make test && make install

第二步:设置环境变量,使得perl在安装模块的时候会优先使用我们指定的路径

echo 'eval "$(perl -I$HOME/opt/lib/perl5 -Mlocal::lib=$HOME/opt)"' >> ~/.bashrc

先用perl -I$HOME/opt/lib/perl5 -Mlocal::lib=$HOME/opt表示运行前先添加$HOME/opt/lib/perl5到自己的搜索路径@INC中,然后传入参数$HOME/opt执行模块local::lob,这个模块的执行结果会输出如下内容

Attempting to create directory /home6/wangjw/opt
PATH="/home/zgxu/opt/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/home/zgxu/opt/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/home/zgxu/opt${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/home/zgxu/opt\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/home/zgxu/opt"; export PERL_MM_OPT;

这些就作为eval的参数进行执行,也就是说你重启终端后后,PERL5LIB PERL_LOCAL_LIB_ROOT,PERL_MB_OPT,PERL_MM_OPT这几个变量就会重新设置,以此保证你后续安装perl模块时,会优先安装到自己的选择的目录

第三步:安装cpam. 由于之前已经配置了local::lib,因此perl编译的工具都会默认安装到~/opt目录下

wget https://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7043.tar.gz
tar xf App-cpanminus-1.7043.tar.gz
cd App-cpanminus-1.7043
perl Makefile.PL
make test && make install

第四步:使用国内镜像提高下载速度,可以通过别名的方式实现

echo 'alias cpanm="cpanm --mirror http://mirrors.163.com/cpan --mirror-only"' >>~/.bashrc

之后便可以使用cpanm Module::Name安装任意的软件了。

自己编译一个perl

自己编译Perl的好处就在于之后的perl模块都会安装到自己的Perl目录下,而不会对系统造成影响。

cd ~/src
wget -4 http://www.cpan.org/src/5.0/perl-5.26.1.tar.gz
tar xf perl-5.26.1.tar.gz
cd perl-5.26.1
./Configure -des -Dprefix=$HOME/opt/sysoft/perl-5.26.1
make test
make install

然后用perl -e '{print "$_\n" foreach @INC}'会发现perl只会在自己的目录~/opt/sysoft/perl-5.26.1下查找模块。那么使用cpanm Module::Name安装的任何包都只会安装到~/opt/sysoft/perl-5.26.1下,你也不需要安装local::lib

conda的perl和系统的perl冲突

有一次我遇到这个问题

perl: symbol lookup error: /home/wangjw/perl5/lib/perl5/x86_64-linux-thread-multi/auto/Cwd/Cwd.so: undefined symbol

这个问题显然我用系统perl安装的软件被conda的perl有限查找到导致,用perl -Vperl -e '{print "$_\n" foreach @INC}'可以发现conda的perl查找路径低于我为系统perl安装的路径,解决方案如下

export PERL5LIB=""
目录
相关文章
|
7月前
|
人工智能 算法 数据库
美团面试:LLM大模型存在哪些问题?RAG 优化有哪些方法?_
美团面试:LLM大模型存在哪些问题?RAG 优化有哪些方法?_
|
Docker 容器
docker --cpus 详解
docker --cpus 详解
|
并行计算 Ubuntu Linux
Ubuntu 20.04 Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码
Ubuntu 20.04 Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码
905 0
|
数据挖掘 Go 计算机视觉
文献丨群体转录组分析eQTLs调控基因表达
文献丨群体转录组分析eQTLs调控基因表达
|
存储 缓存 前端开发
全面解析:前端超大文件下载的关键技巧与优化策略
全面解析:前端超大文件下载的关键技巧与优化策略
718 1
全面解析:前端超大文件下载的关键技巧与优化策略
|
存储 C++ UED
【C++】飞机大战项目记录
通过上面的设计,我们实现来看飞机大战的主要功能
244 4
|
存储 Java 测试技术
学校热点新闻推送系统 毕业设计 JAVA+Vue+SpringBoot+MySQL(一)
学校热点新闻推送系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
295 0
|
应用服务中间件 nginx 开发工具
Nginx 13: Permission denied 解决方案
本文首发于我的个人博客:尾尾部落 今天在用uwsgi+nginx在部署flask应用时,遇到502的错误,vim /var/log/nginx/error.
3490 0
|
安全 网络安全 数据安全/隐私保护