cra*_*tor 1 perl perl-module local
我有一个模块Term:TermKey,它位于TermKey.pm文件中.我不想把它安装到我的perl中; 我希望它在本地引用,以便脚本可以移动到其他机器而不会弄乱每个perl安装.我该怎么做呢?我在网上看到的所有推荐都没有.我总是得到某种形式:
Can't locate loadable object for module Term::TermKey in @INC (@INC contains: /home/fritz/multi.kodis/Term /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at test.pl line 6.
Compilation failed in require at test.pl line 6.
BEGIN failed--compilation aborted at test.pl line 6.
Run Code Online (Sandbox Code Playgroud)
测试一下.我将TermKey.pm的副本放在以下所有内容中:
./TermKey.pm
./Term/TermKey.pm
./Term/Term/TermKey.pm
Run Code Online (Sandbox Code Playgroud)
(就像测试一样)
但它不适用于任何:
use lib '';
use Term::TermKey;
use lib '.';
use Term::TermKey;
use lib './';
use Term::TermKey;
use lib './Term';
use Term::TermKey;
use lib './Term/';
use Term::TermKey;
use lib '/home/[user]/[project]'
use Term::TermKey;
use lib '/home/[user]/[project]/Term'
use Term::TermKey;
use FindBin;
use lib "$FindBin::RealBin";
use Term::TermKey;
Run Code Online (Sandbox Code Playgroud)
有没有搞错?这应该很容易,我错过了什么?
"无法找到模块的可加载对象"并不意味着Perl找不到Term/TermKey.pm.这意味着它找不到Term/TermKey.so(或者在您的平台上调用任何共享库).
Term :: TermKey不是纯Perl模块.相反,它包含XS代码,需要将其编译为C,然后再编译到共享库中.此外,该库链接到libtermkey,libtermkey也必须安装在您的系统上.
这使得将模块从系统移动到系统变得更加困难.为Perl 5.18.2编译的XS模块不适用于5.20.0; 它必须重新编译.您可以升级次要版本(例如从5.18.0升级到5.18.2)而无需重新编译,但不能保证其他方向(从5.18.2升级到5.18.0).
因此,如果所有计算机在安装了相同库的同一操作系统上运行相同版本的Perl,则可能能够使其工作.最简单的方法(如果它可以工作)将是安装cpanm和local :: lib并执行以下操作:
cpanm --local-lib some-dir Term::TermKey
Run Code Online (Sandbox Code Playgroud)
然后你可以复制some-dir到另一台机器(上面列出的警告).没有必要在其他机器上安装local :: lib; 你可以
use lib 'some-dir/lib/perl5';
Run Code Online (Sandbox Code Playgroud)