我知道它很难看,但是我需要在Windows上为客户端编译一个perl脚本,所以基本上我试图从.pl脚本中创建一个.exe。
我正在使用通过cpan安装的PAR :: Packer,我成功地编译了一堆简单的脚本。
以前工作正常,但由于我添加了使用Text :: CSV;
,它现在看起来不起作用了它可以工作,但是当我运行.exe时会出现这个错误:
Can't locate Text/CSV_PP.pm in @INC (@INC contains: CODE(0x25f1f84) C:\Users\user
\AppData\Local\Temp\par-6b6f6e74757a\cache-6d4baa68e36871e6407210ca47953c635f
81e612\inc\lib C:\Users\user\AppData\Local\Temp\par-6b6f6e74757a\cache-6d4baa6
8e36871e6407210ca47953c635f81e612\inc CODE(0x239f2ec) CODE(0x239f67c)) at (eval
18) line 2.
at script/csvutil.pl line 5.
Compilation failed in require at script/csvutil.pl line 5.
BEGIN failed--compilation aborted at script/csvutil.pl line 5.
基本上我所做的是:
pp -o csvutil.exe csvutil.pl
我尝试通过以下方式添加强制加载模块:
pp -M Text::CSV csvutil.pl
我想我错过了什么......
我正在使用草莓perl 5.16
代码的开头:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use Text::CSV;
my $file = $ARGV[0];
my @rows;
my $csv = Text::CSV->new ( { binary => 1 ,sep_char => ",",allow_loose_quotes => 1, eol=> $/, always_quote =>1 } ) # should set binary attribute.
or die "Cannot use CSV: ".Text::CSV->error_diag ();
...# basically print all the lines
答案 0 :(得分:3)
Text :: CSV实际上只是一个界面。它自动确定要使用的后端模块:pure-Perl Text :: CSV_PP或XS(C code)Text :: CSV_XS。 PAR正在检测Text :: CSV上的静态依赖性,但无法解析动态依赖性。更改-M
选项以包含Text :: CSV_XS或Text :: CSV_PP。如果安装了XS版本,请捆绑它。它快得多。
答案 1 :(得分:0)
@INC
中的路径可能存在问题。
您可能会找到答案here
答案 2 :(得分:0)
我建议远离PAR并使用Cava Packager。我过去曾经使用过PAR,但是我是否会将应用程序包装好。它似乎没有很好地处理某些模块,当你遇到一个它无法处理资源稀疏和修复通常是脏黑客。 Gtk + / Tk应用确实给PAR带来了困难。
另一方面,Cava Packager非常强大,主动维护并且能够处理我投入的所有模块。它允许您/社区创建有关如何处理特定模块的特殊情况的规则。我遇到的任何问题都可以通过活动邮件列表快速解决。它提供了一个用于配置项目设置的GUI。它具有InnoSetup支持,可在打包应用程序时自动创建安装程序。它得到了积极维护,目前正在努力成为开源的。在我找到Cava Packager之前,我几乎放弃了将perl脚本打包为可执行文件的想法。在使用PAR和ActiveState的perl2exe之后,Cava超出了我设定的预期。听起来我可能是Cava的开发人员,但我真的不是!非常高兴。我知道这并没有完全回答你提出的问题,但它确实解决了你的问题,我认为你可能会发现Cava和我一样有用。