我该如何编译我的Perl脚本,以便在没有安装“perl”的系统上执行?

57

我有一个.pl文件,即使没有安装perl,我也想在任何系统中执行该文件。我该怎么做?

有哪些好的示例可以实现这一点?

8个回答

44

pp可以创建一个包括Perl和脚本(以及任何模块依赖项)的可执行文件,但它将特定于您的体系结构,因此您无法在Windows和Linux上运行它。

根据其文档:

要创建独立的可执行文件,适用于在没有安装Perl的计算机上运行:

   % pp -o packed.exe source.pl        # makes packed.exe
   # Now, deploy 'packed.exe' to target machine...
   $ packed.exe                        # run it
(%和$是不同机器上的命令提示符。)

2
@lokesh:首先安装pp(Par-Packer分发的一部分,因此您需要安装Par::Packer),然后执行上面的pp命令,使用您的脚本替换source.pl。它应该检测到您使用的模块并将其包含在内。 - ysth
@lokesh:我以为我做了。你需要哪部分帮助? - ysth
@lokesh ysth的帖子中有文档链接。请随意阅读或提出具体问题。 - Sinan Ünür
"pp" 把我的 10 行 Perl 脚本变成了一个 8MB 的可执行文件。太棒了。 - CJ7
@CJ7 它必须有 Perl 的实力,所以它不会很小。 - ysth
显示剩余5条评论

31
  1. 安装PAR::Packer。*nix示例:

    sudo cpan -i PAR::Packer

    对于Windows中的Strawberry Perl或已安装MSVC的ActivePerl:

    cpan -i PAR::Packer
  2. 使用pp打包。它将在Windows上创建一个名为“example”或“example.exe”的可执行文件。

    pp -o example example.pl

这仅适用于构建它的操作系统。

P.S. 很难找到没有Perl的Unix克隆版。你是想说Windows吗?


4
如果你需要将代码交叉编译,PAR并不是一个完整的解决方案。 - brian d foy
4
另外,你不需要使用 cpan 的 -i 开关。只需提供模块列表,它就会自行解决这部分问题。 :) - brian d foy
是的,-i 是隐含的。MAN PAGE:-i ... 安装指定的模块。如果没有其他开关,则隐含此开关。 在回答中还有一个好的经验法则:不要在回答中抛出标志和参数而不解释它们的作用。 - B. Shea

9

来自perlfaq3的答案,关于如何将我的Perl程序编译成字节码或C语言?


(由brian d Foy贡献)

通常情况下,你做不到这一点。但是对于你的情况,有一些可能奏效的方法。人们通常问这个问题是因为他们想在不公开源代码的情况下分发他们的作品,而大多数解决方案是以牺牲磁盘空间为代价来换取便利性的。你可能也不会看到很大的速度提升,因为大多数解决方案只是在最终产品中捆绑了Perl解释器(但请参见如何使我的Perl程序运行更快?)。

Perl档案工具包 ( http://par.perl.org/ ) 是Perl对Java JAR的类比。它是免费提供的,并可在CPAN上获得 ( http://search.cpan.org/dist/PAR/ )。

此外还有一些商业产品可能适合您,尽管您必须购买许可证。

ActiveState的Perl Dev Kit ( http://www.activestate.com/Products/Perl_Dev_Kit/ ) 可以“将您的Perl程序转换为适用于HP-UX、Linux、Solaris和Windows的即用型可执行文件。”

Perl2Exe(http://www.indigostar.com/perl2exe.htm)是一个命令行程序,用于将perl脚本转换为可执行文件。它支持Windows和Unix平台。

3
请注意,这是2009年的答案,但Reini Urban已经更新过了。 - brian d foy

7

使用 PAR;%pp -o packed.exe try.pl # 生成packed.exe $ packed.exe # 运行它嗨,这是我的代码,我已经安装了PAR,但是即使它抛出“无法找到PAR.pm @INC...”,您能告诉我出了什么问题吗?请从基础知识开始教我..我以前从未尝试过..我有一个。pl文件,然后如何使用PAR将其更改为.exe,您可以举个例子来告诉我吗? - User1611

6

不要忘记 ActiveState's PDK。它可以帮助你编译UI、命令行、Windows服务和安装程序。

我强烈推荐它,多年来一直为我服务得非常好,但需要花费约300美元购买许可证。


3

Cava Packager 在 Windows 生态系统上表现很不错。


1
Perl文件是脚本,而不是可执行程序。因此,为了让它们“运行”,它们需要一个解释器。
所以,你有两个选择: 1)在你想要运行脚本的机器上安装解释器,或者 2)将脚本运行在一个网络(或互联网)机器上,然后通过远程连接(例如使用浏览器)进行操作。

3
但是,在你之前的两个答案证明了你的评论是无效的。 - KevinDTimm
2
不,他们没有。PAR只是将特定于平台的Perl二进制文件存档到您要分发的脚本中。 - friedo
@kevindtimm:David Lewis所说的并没有错。pp将会把Perl解释器和脚本一起打包。因此,它相当于选择1。 - Inshallah
使用PAR打包Perl程序:% pp -o packed.exe try.pl # 生成packed.exe $ packed.exe # 运行它你好,这是我的代码,我已经安装了PAR,但是它仍然抛出“无法找到PAR.pm @INC...”的错误,请问我哪里错了?能否从基础开始告诉我如何操作?我有一个.pl文件,然后如何使用PAR将其转换为.exe文件?能否给我一个例子? - User1611

-1
在 Mac OS X 上可能会有perlcc。输入man perlcc。在我的系统(10.6.8)中,它位于/usr/bin。您的情况可能有所不同。
请参见perl-5.8.9 / perlcc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接