【问题标题】:How can I compile my Perl script so it can be executed on systems without 'perl' installed?如何编译我的 Perl 脚本,以便它可以在没有安装“perl”的系统上执行?
【发布时间】:2010-11-17 06:16:06
【问题描述】:

我有一个.pl 文件,我想在任何系统中执行该文件,即使没有安装perl。我怎样才能实现它?

有什么好的例子可以做到这一点?

【问题讨论】:

    标签: perl


    【解决方案1】:

    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
    

    (%和$在不同的机器上有命令提示符)。

    【讨论】:

    • 嗨,你能简单解释一下吗...因为我是 perl 的新手...。无论我需要在我的 perl 源代码中添加此代码还是必须在命令提示符中执行它。 ...我使用过像 use Win32::OLE 这样的模块;使用 Win32::OLE::Enum;使用电子表格::BasicRead;我怎样才能让我的 .pl 在每个系统中运行.. Windows(最好)
    • @lok​​esh,我认为您必须使用预编译的 perl 解释器为每个系统打包脚本+模块并将它们放在一个 zip 文件中。
    • @Inshalla:对于每个不同的操作系统,而不是每个不同的计算机
    • @lok​​esh:首先安装 pp(Par-Packer 发行版的一部分,因此您将安装 Par::Packer),然后使用您的脚本代替 source.pl 执行上面的 pp 命令.它应该检测您使用的模块并包含它们。
    • @lok​​esh:我以为我做到了。您需要哪些方面的帮助?
    【解决方案2】:
    1. 安装PAR::Packer。 *nix 的示例:

      sudo cpan -i PAR::Packer

      对于 Windows 的草莓 Perl 或安装的 ActivePerl 和 MSVC:

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

      pp -o example example.pl

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

    附注真的很难找到没有 Perl 的 Unix 克隆。你是说 Windows 吗?

    【讨论】:

    • 如果你要打包的代码需要交叉编译,PAR并不是一个完整的解决方案。
    • 另外,您不需要将 -i 开关切换到 cpan。只需给它一个模块列表,它就会为你找出那部分。 :)
    • 是的 -i 是隐含的。 MAN PAGE:-i ... Install the specified modules. With no other switches, this switch is implied. 答案中的另一个好的经验法则:不要在没有解释它们的作用的情况下在答案中抛出标志和参数。
    【解决方案3】:

    来自perlfaq3How can I compile my Perl program into byte code or C?的回复:


    (由布赖恩·德·福伊提供)

    一般情况下,您不能这样做。不过,有些事情可能对您的情况有用。人们通常会问这个问题,因为他们希望在不泄露源代码的情况下分发他们的作品,并且大多数解决方案都会为了方便而交换磁盘空间。您可能也不会看到速度有多少提高,因为大多数解决方案只是在最终产品中捆绑了一个 Perl 解释器(但请参阅如何使我的 Perl 程序运行得更快?)。

    Perl 存档工具包 (http://par.perl.org/) 是 Perl 对 Java 的 JAR 的模拟。它在 CPAN (http://search.cpan.org/dist/PAR/) 上免费提供。

    也有一些商业产品可能适合您,但您必须为它们购买许可证。

    来自 ActiveState 的 Perl 开发工具包 (http://www.activestate.com/Products/Perl_Dev_Kit/) 可以“将您的 Perl 程序转变为可用于 HP-UX、Linux、Solaris 和 Windows 的可立即运行的可执行文件。”

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

    【讨论】:

    • 请注意,这是 2009 年的答案,但 Reini Urban 有更新
    【解决方案4】:

    查看PAR(Perl 归档工具包)。

    PAR 是一种跨平台打包和 部署工具,称为交叉 在 Java 的 JARPerl2EXE/PerlApp.

    【讨论】:

    • 使用 PAR; % pp -o packed.exe try.pl # make packed.exe $ packed.exe # 运行它你好,这是我的代码,我已经安装了 PAR 但即使它抛出“cant locate PAR.pm @INC ...”也可以你告诉我哪里出错了?你能从基本的电话给我吗..我以前从未尝试过..我有一个.pl文件,然后我如何使用PAR更改为.exe你能告诉我一个例子吗
    【解决方案5】:

    别忘了ActiveState's PDK。它将允许您编译 UI、命令行、Windows 服务和安装程序。

    我强烈推荐它,这些年来它对我很有帮助,但许可证大约需要 300 美元。

    【讨论】:

      【解决方案6】:

      Cava Packager 非常适合 Windows 生态系统。

      【讨论】:

        【解决方案7】:

        Perl 文件是脚本,而不是可执行程序。因此,为了让他们“运行”,他们将需要一个解释器。

        所以,您有两个选择: 1) 在您希望运行脚本的机器上安装解释器,或者 2) 让脚本在您远程连接(即使用浏览器)的联网(或 Internet)机器上运行

        【讨论】:

        • 但是,你之前的两个答案证明你的评论无效。
        • 不,他们没有。 PAR 只是将特定于平台的 perl 二进制文件与您分发的脚本一起存档。
        • @kevindtimm:David Lewis 所说的并没有错。 pp 将简单地将 perl 解释器与脚本一起打包。所以它相当于选择号 1。
        • 使用 PAR; % pp -o packed.exe try.pl # make packed.exe $ packed.exe # 运行它你好,这是我的代码,我已经安装了 PAR 但即使它抛出“cant locate PAR.pm @INC ...”也可以你告诉我哪里出错了?你能从基本的电话给我吗..我以前从未尝试过..我有一个.pl文件,然后我如何使用PAR更改为.exe你能告诉我一个例子吗
        【解决方案8】:

        在 Mac OS X 上可能有 perlcc。键入 man perlcc。在我的系统 (10.6.8) 上,它位于 /usr/bin 中。您的里程可能会有所不同。

        perl-5.8.9 / perlcc

        【讨论】:

          猜你喜欢
          • 2010-09-09
          • 2012-05-17
          • 1970-01-01
          • 2011-03-08
          • 2017-12-12
          • 2014-03-05
          • 2011-12-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多