我尝试使用来自App :: Fatpacker模块的fatpack实用程序(在运行Perl 5.20的CentOS 6.6 64位上)对我的Perl脚本进行fatpack。我的脚本使用Log :: Log4perl模块进行日志记录。 fatpack实用程序抱怨记录模块:
fatpack trace collect_genomes_to_database.pl
collect_genomes_to_database.pl syntax OK
fatpack packlists-for `cat fatpacker.trace` >packlists
Can't locate object method "new" via package "Log::Log4perl::Appender" at ~/perl5/lib/perl5/Log/Log4perl/Logger.pm line 33.
Compilation failed in require at ~/perl5/lib/perl5/Log/Log4perl/Config.pm line 8.
BEGIN failed--compilation aborted at ~/perl5/lib/perl5/Log/Log4perl/Config.pm line 8.
Compilation failed in require at ~/perl5/lib/perl5/Log/Log4perl/Appender.pm line 9.
BEGIN failed--compilation aborted at ~/perl5/lib/perl5/Log/Log4perl/Appender.pm line 9.
Compilation failed in require at ~/perl5/lib/perl5/App/FatPacker.pm line 149.
BEGIN failed--compilation aborted at ~/perl5/bin/fatpack line 3.
有人成功打包包含Log :: Log4perl的脚本还是不可行?
你能否建议一些制作自包含脚本的其他方法?
答案 0 :(得分:5)
解决问题的一种方法是在其余部分之前显式加载Log4perl。
PERL5OPT='-mLog::Log4perl' fatpack ...
这应该可以解决问题,使事情有效。
提示mst
和irc.perl.org#toolchain
答案 1 :(得分:4)
docs of App::FatPacker表示最好通过irc.perl.org上的#toolchain
提供支持。我冒昧地在那里分享这个问题。
以下是删除了无关内容的对话日志。
[16:02:15]< simbabque> mst:关于fatpacker的有趣问题Is it possible to fatpack script using Log::Log4perl using App::Fatpacker?
[16:15:47]< mst> simbabque:不是真的,用户没有使用他们的大脑,Mithaldu已经解决了问题:) [16:15:47]< Mithaldu> \ O /
[16:16:08]< Mithaldu>主要问题:用户使用旧的perl,不告诉他们加载模块
[16:16:50]< mst>嗯,实际上,这似乎是命令列表 - 用于命令
[16:16:51]< mst> simbabque:等一下 [16:16:53]< mst>我操我 [16:17:14]< mst>这可能是一个l4p的bug [16:17:31]< mst> simbabque:ooooh
[16:18:02]< mst>我认为 [16:18:24]< mst> Log :: Log4perl :: Appender正在加载:: Config,它正在加载:: Logger ...然后在定义方法之前尝试 - > new on :: Appender [16:18:49]< mst>因此,为什么包装清单正在试图要求模块 [16:19:29]< Mithaldu>听起来各种各样的不愉快 [16:21:00]< mst>或者他错过了一大堆错误 [16:21:23]< simbabque>他错过了一些听起来很可能的事情 [16:21:28]< mst>啊,不,它是在做一个要求,我是对的,L4p是性交的 [16:21:32]< mst> 149是'要求$ t;' [16:21:42]< mst>这是l4p中的循环要求问题 [16:22:57]< Mithaldu>所以他必须要%INC munge?
[16:24:25]< mst>或者有人应该用棍子击打MSCHILLI并将其固定 [16:27:13]< mst> BINGO
[16:27:17]< mst> perl -e'使用Log :: Log4perl :: Appender;'
[16:27:19]< mst> BOOM
[16:30:15]< mst> https://github.com/mschilli/log4perl/issues/59
[16:30:16]< dipsy> [通知要求引起爆炸·问题#59·mschilli / log4perl·GitHub]
[16:30:22]< mst>有人可以把它推到SO上 [16:30:35]< Mithaldu>确保
[16:33:44]< kentnl>我想你可以通过在“Tree”阶段之后避免packlists中的问题模块并手动复制它来解决这个问题。但我在这里做得不多 [16:34:11]< mst> PERL5OPT =' - mLog :: Log4perl'脂肪包...
[16:34:13] - * - 以太看到riche已经离开:/
[16:34:14]< mst>可能会工作 [16:34:26]< mst>是的
正如Kent Fredric已发布的那样,解决方法是
$ PERL5OPT='-mLog::Log4perl' fatpack collect_genomes_to_database.pl
......但他发布的速度更快。
这就是Perl社区的工作。 :)