有没有办法创建同时运行 Python 和 Perl 脚本的可执行文件?

Is there a way to create an executable that runs both Python and Perl script?

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

这是一个示例,说明如何使用 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