2014-02-06 4 views
2

Я знаю, что есть два других вопроса, которые попадают в одно и то же здесь, но мое происходит от фактических попыток предложения там и в надежде, что есть другие варианты, которые сработали для людей с тех пор.Каков правильный вызов pp для упаковки этой структуры каталогов?

Установки: У меня есть приложение с несколькими модулями, которые я хочу поделиться с кем-то, находящимся на компьютере с Windows, с установленным дистрибутивом Strawberry Perl.

Структура этого что-то вроде этого:

PerlApp 
lib 
    Base 
    Base.pm 
    Gui.pm 
    Db 
    Db.pm 
    records.db 
    Parser 
    Parser.pm 
    Utils 
    Utils.pm 
PerlApp.pl 
Config.txt 

Все это имеет две точки входа. Я могу запустить его либо через интерфейс командной строки cmd с помощью скрипта PerlApp.pl, либо запустить файл Gui.pm, который содержит Wx-интерфейс.

Я запускаю Strawberry Perl с несколькими модулями, установленными из CPAN, которые используются этой программой. Я пытался использовать Cava Packager, к сожалению, он не поддерживает версию perl, с которой я это разработал.

Я пробовал pp, но исполняемый файл, полученный в результате упаковки сценария cmd, приводит к различным ошибкам. Я консультировался с документацией, но для жизни я не могу понять, как использовать этот модуль для упаковки полного дерева каталогов или если это даже поддерживается. (Документация синдром телефонной книги)

Я попытался

pp -o app.exe PerlApp.pl 

Ошибки:

The locale codeset (cp1252) isn't one that perl can decode, stopped at Encode/Locale.pm line 94 
Compilation failed in require at LWP/UserAgent.pm line 1000 
Compilation failed in require at lib/Base/Base.pm line 9 

Крайним решение упаковка всех файлов, необходимых и выяснить, что должна быть установлены на модули CPAN внешнюю машину, чтобы заставить ее работать, и в конечном итоге попросить пользователя самостоятельно установить ее вручную.

+0

'pp', вероятно, путь. Если у вас были проблемы с его использованием, было бы лучше всего показать нам сообщения об ошибках и т. Д. - в идеале - полный, минимальный и исполняемый пример, демонстрирующий вашу проблему. Тогда мы сможем помочь вам в этом. Мы не можем вам помочь, указав на модуль '' Magic :: FairyWand' v0.42, который решит все ваши проблемы без дальнейших усилий »(https://metacpan.org/pod/Magic::FairyWand), потому что он не существует. – amon

+0

Моя проблема с его использованием заключается в том, что я не понимаю его использования. Да, смешно знаю. Учитывая структуру, о которой я упоминал в op, как бы я ее запустил, даже чтобы получить представление о выходе. Я попробовал очевидный pp -o bla.exe PerlApp.pl.Но я очень сомневаюсь, что это так, если только pp ловко не оглядывается в этом каталоге, как вы сказали, пожелание FairyWand. – user3046061

+0

Ах. Возможно, вы можете отредактировать свой вопрос, чтобы было более очевидно, что вы действительно спрашиваете: «Что является правильным вызовом' pp' для упаковки этой структуры каталогов? 'Some command' не работает. *« Я не знаю, у вас есть необходимые знания, чтобы ответить на это, но вы можете сделать это проще для других людей. – amon

ответ

1

У меня была похожая ошибка, связанная с charset (или кодовой страницей в Windows), когда я упаковал perl-скрипт. Я гугл всюду, но не нашел прямого ответа, но в итоге сам понял.

  1. На самом деле модуль Encode способен декодировать CP1252, реальная проблема заключается в том, что Encode::Locale определяет соответствующий набор символов на RUNTIME но PP только добавляет необходимые зависимости во время компиляции (если я могу сказать). Поэтому вам нужно добавить опцию -x в команду для добавления зависимостей во время выполнения.
  2. Избегайте Encode::Locale полностью. Даже вы упаковываете необходимый декодер pm в свой исполняемый файл, когда он запускается в другой системе с разной кодировкой, аналогичная ошибка будет происходить. Я предлагаю вам узнать, какая строка вашего кода использует Encode::Locale и выяснить способ обхода.