簡體   English   中英

Perl Par :: Packer找不到模塊問題

[英]Perl Par::Packer Can't find module issue

我有一個Perl程序,在帶有草莓perl的Windows 7 32bit上使用WWW::Mechanize::Firefox

使用命令C:\\>perl testcase.pl 當我使用C:\\>pp -o testcase.exe testcase.pl編譯時,它不會出現錯誤。

當我運行testcase.exe時,出現以下錯誤:

Failed to connect to , Can't locate object method "setup" via package "MozRepl::Client" at MozRepl.pm line 224

我用於testcase.pl的代碼是:

#!perl
use MozRepl;
use WWW::Mechanize::Firefox;
use warnings;
system('start firefox');
sleep(5);
$mech = WWW::Mechanize::Firefox->new;

還要注意,沒有WWW::Mechanize::FirefoxMozRepl確實可以正常工作。 問題顯然已經縮小到PAR::Packer不喜歡MozRepl ,知道這可能是什么嗎?

PAR :: Packer有時很難確定PAR軟件包中需要包含哪些模塊才能滿足您要打包的程序的所有要求。

如果依賴關系是通過普通的“ use”或“ require”語句加載的,那么可以解決問題,其中要加載的模塊是文字字符串,但是如果使用以下方式動態加載模塊,則機會不大:

require $myModuleToLoad;

瀏覽MozRepl和相關模塊的源代碼表明,它們大量使用了動態加載的插件。 我懷疑其中一些沒有包裝。

您可以通過為每個要添加的模塊在pp命令行中添加-M Module::Name來手動指定要包含在PAR包中的模塊(將Module :: Name替換為實際的模塊名稱) 。

困難的部分可能是確定要包括哪些模塊。 一種方法是在腳本末尾臨時添加如下代碼:

END { print "$_ -> $INC{$_}\n" foreach sort keys %INC; }

然后正常運行腳本,而不是通過PAR。 它應該列出所有已加載的模塊。 您可以將其與PAR軟件包中的實際模塊進行比較,並使用-M選項將缺失的模塊添加到pp。

通過使用7zip之類的解壓縮工具打開PAR文件,可以看到其內部的模塊。 或在Linux中:

unzip -l {parfile}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM