如何使用 Nuitka for Python 生成多个可执行文件?

问题描述 投票:0回答:1

我尝试使用 Nuitka 通过 Python 脚本进行编译。我有六个脚本,其中三个是模块和数据脚本。其中三个需要编译为可执行文件。如何在 Nuitka 中递归编译所有三个。

我看到了Nuitka用户手册,上面说了一些关于

Multidist
的内容,我不明白该怎么做。我尝试了类似
<command> --main=updater.py --main=installer.py
的方法,但没有成功。

如果你有多个程序,每个程序都应该是可执行的,在过去你必须多次编译,并部署所有这些。在独立模式下,这当然意味着您相当浪费,因为可以共享文件夹,但 Nuitka 并不真正支持。

进入多区域。有一个选项 --main 可以替换或添加给定的位置参数。并且可以多次给予。当多次给出时,Nuitka 将创建一个二进制文件,其中包含给定的所有程序的代码,但共享其中使用的模块。因此,它们不必多次分发。

让我们调用主路径的基本名称和入口点。当然,它们的名称必须不同。然后创建的二进制文件可以执行任一入口点,并对 sys.argv[0] 出现的内容做出反应。因此,如果以正确的方式执行(使用子进程或操作系统 API 之类的东西,您可以控制这个名称),或者通过重命名或复制二进制文件,或者符号链接到它,您就可以实现奇迹。

Python version: 3.11.6
Nuitka version: 1.9.2
OS: Windows
Arch: x86_64
WindowsRelease: 10 (Actually 11)
Nuitka-Scons:INFO: For Python version 3.11 MSVC 14.3 or later is required, not 14.2 which is too old.
Version C compiler: ~\AppData\Local\Nuitka\Nuitka\Cache\downloads\gcc\x86_64\13.2.0-16.0.6-11.0.1-msvcrt-r1\mingw64\bin\gcc.exe (gcc 13.2.0).

如有任何帮助,我们将不胜感激。

python compilation executable nuitka
1个回答
0
投票

考虑这个例子:

# test1.py
print("hi")
# test2.py
print("hello")

通过

python -m nuitka --main=test1.py --main=test2.py --standalone
编译会生成一个二进制文件:
./test1.dist/test1.bin

执行

test1.bin
运行
test1.py
入口点:

hi

通过重命名可执行文件以匹配另一个入口点的名称 (

test2.py
) 来执行另一个入口点 (
test2.bin
)

hello

您也可以使用Python来选择入口点。

# Output is 'hi'
subprocess.run("test1", executable="./test1.dist/test1.bin")

# Output is 'hello'
subprocess.run("test2", executable="./test1.dist/test1.bin")

更一般地说,Nuitka 根据

sys.argv[0]
的值选择入口点。这就是文档这部分的含义:

然后创建的二进制文件可以执行任一入口点,并对 sys.argv[0] 出现的内容做出反应。因此,如果以正确的方式执行(使用子进程或操作系统 API 之类的东西,您可以控制这个名称),或者通过重命名或复制二进制文件,或者符号链接到它,您就可以实现奇迹。

© www.soinside.com 2019 - 2024. All rights reserved.