gpt4 book ai didi

perl - 我用 CPAN 成功安装了一个模块,但是 perl 找不到它。为什么?

转载 作者:行者123 更新时间:2023-12-03 20:27:14 28 4
gpt4 key购买 nike

我安装了一个这样的 CPAN 模块:

cpan Acme

根据输出,安装成功:

Running install for module 'Acme'
...
All tests successful.
Files=2, Tests=3, 0 wallclock secs ( 0.02 usr 0.00 sys + 0.04 cusr 0.00 csys = 0.06 CPU)
Result: PASS
INGY/Acme-1.11111111111.tar.gz
/usr/bin/make test -- OK
Running make install
Manifying 1 pod document
Installing /home/foo/perl5/lib/perl5/Acme.pod
Installing /home/foo/perl5/lib/perl5/Acme.pm
Installing /home/foo/perl5/man/man3/Acme.3pm
Appending installation info to /home/foo/perl5/lib/perl5/x86_64-linux-thread-multi/perllocal.pod
INGY/Acme-1.11111111111.tar.gz
/usr/bin/make install -- OK

但是当我尝试使用该模块时,我得到一个错误:

$ perl -MAcme -e1
Can't locate Acme.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .).
BEGIN failed--compilation aborted.

为什么即使安装成功,perl 也找不到模块?我怎样才能解决这个问题?

最佳答案

该模块安装在这里:

/home/foo/perl5/lib/perl5/Acme.pm

但是 perl 在 @INC 中寻找模块,在这种情况下包含:

/usr/local/lib64/perl5
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib64/perl5
/usr/share/perl5
.

( . 指的是当前工作目录。)

由于模块不在 @INC , perl 在没有帮助的情况下找不到它。

为什么 CPAN 将模块安装在 @INC 之外?

一个常见的原因是将 CPAN 配置为引导 local::lib以便将模块安装在您的主目录中,而不是安装在系统 Perl 目录中。如果您有 CPAN 1.9463 or higher并且您在默认安装路径中没有写入权限,第一次运行 CPAN 时会提示您:

Warning: You do not have write permission for Perl library directories.

To install modules, you need to configure a local Perl library directory or
escalate your privileges. CPAN can help you by bootstrapping the local::lib
module or by configuring itself to use 'sudo' (if available). You may also
resolve this problem manually if you need to customize your setup.

What approach do you want? (Choose 'local::lib', 'sudo' or 'manual')
[local::lib]

如果您选择引导 local::lib(默认),模块将安装在 ~/perl5 内。 .可能还会提示您:

Would you like me to append that to /home/foo/.bashrc now? [yes]

如果您选择yes(默认),一些变量将被添加到您的 .bashrc 中。 (或你的 shell 的等价物),这样当你以后运行 CPAN 时,模块将继续安装在你的主目录中:

PATH="/home/foo/perl5/bin${PATH+:}${PATH}"; export PATH;
PERL5LIB="/home/foo/perl5/lib/perl5${PERL5LIB+:}${PERL5LIB}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/home/foo/perl5${PERL_LOCAL_LIB_ROOT+:}${PERL_LOCAL_LIB_ROOT}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/home/foo/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/home/foo/perl5"; export PERL_MM_OPT;

我该如何解决?

如果 CPAN 将上述环境变量添加到您的 .bashrc (或等价物),最简单的方法是启动一个新的 shell(或获取你的 .bashrc )。这将设置 PERL5LIB 以便 perl 可以找到安装在 ~/perl5 中的模块.

另一方面,如果您有 sudo 访问权限并且希望 CPAN 将模块安装在系统 Perl 目录而不是您的主目录中,请从您的 .bashrc 中删除环境变量设置。 (或等效),启动 CPAN shell,然后运行:
o conf init

这将重置 CPAN 配置。如果要引导 local::lib,系统会再次提示您;改为输入“sudo”。一般来说,我不建议这样做;通常最好使用发行版的包管理器(例如 yum、apt)在系统 Perl 目录中安装模块。

另见: How do I 'use' a Perl module in a directory not in @INC?

关于perl - 我用 CPAN 成功安装了一个模块,但是 perl 找不到它。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32726324/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com