3

我需要在网络主机上安装两个 Perl 模块。我们称它们为 A::B 和 X::Y。X::Y 取决于 A::B (需要 A::B 运行)。他们都使用Module::Install。我已使用成功将 A::B 安装到非系统位置

perl Makefile.PL PREFIX=/non/system/location
make; make test; make install

现在我想安装 X::Y,所以我尝试了同样的事情

perl Makefile.PL PREFIX=/non/system/location

输出是

$ perl Makefile.PL PREFIX=/non/system/location/
Cannot determine perl version info from lib/X/Y.pm
*** Module::AutoInstall version 1.03
*** Checking for Perl dependencies...
[Core Features]
- Test::More          ...loaded. (0.94)
- ExtUtils::MakeMaker ...loaded. (6.54 >= 6.11)
- File::ShareDir      ...loaded. (1.00)
- A::B                ...missing.
==> Auto-install the 1 mandatory module(s) from CPAN? [y] 

它似乎在系统中找不到 A::B,尽管它已安装,并且当它尝试从 CPAN 自动安装模块时,它会尝试将其写入系统目录(忽略 PREFIX)。我曾尝试在命令行之后使用PERL_LIB和之类的变量,但我所做的一切似乎都不起作用。LIBPREFIX=...

我可以做到make并且make install成功,但是make test因为这个问题我做不到。有什么建议么?

我在http://servers.digitaldaze.com/extensions/perl/modules.html找到了一些使用环境变量 PERL5LIB 的建议,但这似乎也不起作用:

export PERL5LIB=/non/system/location/lib/perl5/

没有解决问题。

4

3 回答 3

0

好的,以下处方做到了:

perl Makefile.PL --skipdeps --no-manpages PREFIX=/non/system/location INSTALLSITELIB=/non/system/location/lib INSTALLSITEBIN=/non/system/location/bin INSTALLMAN1DIR=/non/system/location/man/man1 INSTALLMAN3DIR=/non/system/location/man/man3

这只是“猴子看猴子做”,但现在make test有效。

  • 此处的--skipdeps选项抑制了 Module::Install 的便利功能/令人恼火的问题,它尝试使用 CPAN.pm 下载缺失的模块。
  • 应该停止它安装手册页,--no-manpages但它不起作用。
于 2010-06-18T03:52:40.203 回答
0

答案是local::lib,但您可能已经知道:)

于 2010-06-18T04:11:23.277 回答
0

因为这是我认为我会根据我的经验更新的顶部链接(这需要一段时间才能开始工作,因此更新了 7 年前的帖子)。

首轮 perl -le 'print join $/, @INC'

添加(注意,最后没有 / !!) export PERL5LIB=/nonstddir/scripts/modules/lib/site_perl:/nonstddir/scripts/modules/lib

运行 perl -le 'print join $/, @INC' 确保添加了新目录。这使它工作。如果您在路径末尾添加 /,则 INC 条目看起来很奇怪且错误。我的中间有一个//。

完成并工作后,我的看起来像

/nonstddir/scripts/modules/lib/site_perl/5.8.4/sun4-solaris-64int
/nonstddir/scripts/modules/lib/site_perl/5.8.4
/nonstddir/scripts/modules/lib/site_perl
/nonstddir/scripts/modules/lib/sun4-solaris-64int
/nonstddir/scripts/modules/lib
/usr/perl5/5.8.4/lib/sun4-solaris-64int
/usr/perl5/5.8.4/lib
/usr/perl5/site_perl/5.8.4/sun4-solaris-64int
/usr/perl5/site_perl/5.8.4
/usr/perl5/site_perl
/usr/perl5/vendor_perl/5.8.4/sun4-solaris-64int
/usr/perl5/vendor_perl/5.8.4
/usr/perl5/vendor_perl
于 2017-07-17T01:42:17.003 回答