Компилировать Perl-скрипт (включая модули), используя PAR::Packer
Я знаю, что это некрасиво, но мне нужно скомпилировать Perl-скрипт на Windows для клиента, поэтому в основном я пытаюсь сделать.exe из моего.pl-скрипта.
Я использую PAR::Packer, установленный через cpan, и я успешно скомпилировал несколько простых скриптов.
Раньше все работало нормально, но теперь не работает, так как я добавил use 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
3 ответа
Text::CSV на самом деле просто интерфейс. Он автоматически определяет, какой внутренний модуль использовать: либо чисто Perl Text::CSV_PP, либо XS (код C) Text::CSV_XS. PAR обнаруживает статическую зависимость от Text::CSV, но не может разрешить динамическую зависимость. Измени свой -M
возможность включить либо Text::CSV_XS или Text::CSV_PP. Связать версию XS, если она у вас установлена. Это намного быстрее.
Там может быть проблема с путем в @INC
, Возможно, вы найдете ответ здесь
Я бы предложил отойти от PAR и использовать Cava Packager. В прошлом я пользовался PAR, и мне не хватало или нет, получу ли я когда-либо упакованное приложение. Похоже, он не очень хорошо обрабатывает определенные модули, и когда вы сталкиваетесь с ним, он не может справиться с ресурсами, которые редки, а исправления обычно являются грязными хаки. Приложения Gtk+/Tk действительно доставляют PAR трудное время.
Cava Packager, с другой стороны, очень надежен, активно поддерживается и способен обрабатывать все модули, которые я к нему добавляю. Это позволяет вам / сообществу создавать правила о том, как обрабатывать особые случаи для конкретных модулей. Любые проблемы, с которыми я столкнулся, были быстро решены с помощью активного списка рассылки. Он предоставляет графический интерфейс для настройки параметров проекта. Он поддерживает InnoSetup для автоматического создания установщика при упаковке вашего приложения. Он активно поддерживается и в настоящее время работает над тем, чтобы стать открытым исходным кодом. Пока я не нашел Cava Packager, я почти отказался от идеи упаковки сценариев Perl в качестве исполняемого файла для распространения. Cava превзошел все ожидания, которые я установил после использования PAR и ActiveState perl2exe. Может показаться, что я разработчик для Cava, но на самом деле это не так! Просто ОЧЕНЬ СЧАСТЛИВЫ с этим.
Я знаю, что это не совсем отвечает на поставленный вами вопрос, но это решает вашу проблему, и я подумал, что вы можете найти Cava столь же полезным, как и я.