【问题标题】:Is there a way to create an executable that runs both Python and Perl script?有没有办法创建一个同时运行 Python 和 Perl 脚本的可执行文件?
【发布时间】:2020-08-12 15:33:19
【问题描述】:

我正在构建一个 Python 程序,该程序还从内部运行 Perl 脚本。有没有办法在我的程序的用户不必安装 Perl 但有 Python 的情况下创建可执行文件?

【问题讨论】:

  • 如果你从 python 调用 perl 脚本,你也必须安装 perl。
  • @Snow 哦,伙计!好的。谢谢!
  • 我确实发布了一个类似的问题,但没有得到任何回复,而是投了反对票,所以我删除了它。我很抱歉。
  • 另请参阅pp,了解创建不需要安装perl 的Perl 脚本可执行文件的方法
  • @HåkonHægland -- 但如果代码依赖于附加模块,则无法保证最终结果。

标签: python perl executable


【解决方案1】:

这是一个如何使用pp 构建可执行文件的示例(不依赖于正在安装的perl 可执行文件)。

我在 Ubuntu 20.04 上使用 perlbrewperl 版本 5.30。

  • 先安装pp:

    cpanm PAR::Packer
    
  • 创建一个测试Perl脚本hello.pl(你可能需要先安装Path::Tiny):

    use feature qw(say);
    use strict;
    use warnings;
    use Path::Tiny;   # <-- NOTE: non-core module used
    say "Hello world! CWD = ", Path::Tiny->cwd;
    
  • 将其打包成可执行文件:

    pp -o hello hello.pl
    
  • 通过擦除 PATH 来测试 Perl 脚本是否独立于 perl 可执行文件:

    $ PATH= ./hello
    Hello world! CWD = /home/hakon/pp
    
  • 创建一个测试 Python 脚本,t.py:

    import os
    os.system("./hello")
    
  • 运行 Python 脚本:

    $ python3 t.py
    Hello world! CWD = /home/hakon/pp
    

我还使用 Docker 容器对此进行了测试,在该容器中我将编译后的 hello 可执行文件传输到容器,然后在容器内运行 hello

注意:

如果您将此可执行文件传输到具有与构建可执行文件的机器不同版本的核心库(如glibc)的机器上,则可执行文件可能无法在目标机器上运行。有关 Python 中的类似问题以及对此问题的进一步讨论,请参阅this post

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 2020-08-01
    • 2015-10-22
    相关资源
    最近更新 更多