有没有办法创建同时运行 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 上使用 perlbrew
和 perl
版本 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。
我正在构建一个 Python 程序,该程序还从内部运行 Perl 脚本。有没有办法创建一个可执行文件,我的程序的用户不必安装 Perl 但有 Python?
这是一个示例,说明如何使用 pp
构建可执行文件(不依赖于安装的 perl
可执行文件)。
我在 Ubuntu 20.04 上使用 perlbrew
和 perl
版本 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
通过擦除
来测试 Perl 脚本是否独立于PATH
: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。