虚拟主机锁定Perl默认安装目录后,如何让安装脚本识别自定义目录的Perl模块?
虚拟主机锁定Perl默认安装目录后,如何让安装脚本识别自定义目录的Perl模块?
碰到这种主机服务商锁死默认安装目录还靠安装模块收费的情况,确实挺闹心的。不过咱们可以从几个角度入手,让Perl的安装脚本能找到你自定义目录里的模块:
1. 临时设置环境变量,让Perl自动搜索自定义目录
你之前安装的模块实际存放在 ~/USERNAME/lib/lib/perl5 目录下(从你提供的日志路径能看出来),咱们把这个路径加到 PERL5LIB 环境变量里,这样所有Perl进程都会自动把这个目录纳入模块搜索范围:
export PERL5LIB=~/USERNAME/lib/lib/perl5:$PERL5LIB
设置完之后再启动CPAN shell:
perl -MCPAN -e shell
这时候再安装依赖模块,Makefile.PL就能找到你之前装的Canary::Stability了。
2. 永久设置环境变量,避免每次重复操作
如果不想每次登录服务器都手动执行上面的export命令,可以把这个配置加到你的shell配置文件里:
- 编辑
~/.bashrc文件(如果用的是bash):nano ~/.bashrc - 在文件末尾添加上这一行:
export PERL5LIB=~/USERNAME/lib/lib/perl5:$PERL5LIB - 保存退出后,执行下面的命令让配置立即生效:
source ~/.bashrc
之后每次登录服务器,这个环境变量都会自动生效。
3. 直接在CPAN配置里添加搜索路径
你也可以直接修改CPAN的配置,让它在执行安装命令时自动把自定义目录加到模块搜索路径里:
在CPAN shell里依次输入以下命令:
o conf makepl_arg "PREFIX=~/USERNAME/lib INC=-I~/USERNAME/lib/lib/perl5" o conf mbuildpl_arg "--install_base ~/USERNAME/lib --inc -I~/USERNAME/lib/lib/perl5" o conf commit
这样后续安装模块时,CPAN会自动给Makefile.PL或者Build.PL加上 -I 参数,强制它们搜索你的自定义目录。
为什么之前的操作没生效?
你之前虽然成功把Canary::Stability装到了自定义目录,但后续运行JSON-XS的Makefile.PL时,这个自定义目录并没有被加到Perl的模块搜索列表 @INC 里,所以脚本找不到刚安装的模块。上面的方法本质都是把你的自定义目录加入到Perl的默认搜索路径中,从根源解决这个问题。
备注:内容来源于stack exchange,提问作者sebastian nielsen
相关产品推荐
相关产品推荐

