使用Nuitka一起编译游戏#

../../_images/floppy-disk.svg

So you have successfully written your dream game with Arcade and now, you want to share it with your friends and family. Good idea! But there is a small issue. Sadly, they are not a tech geek as big as you are and don't have any knowledge about Python and its working :(. Though 使用PyInstaller捆绑游戏 is a good option, the executables it produces can sometime take up a good amount of space and antiviruses raise false positives almost every time. But Nuitka is here to solve all your problems!

Nuitka 是一个工具,可以将您的Python代码直接编译为机器码,并将您的应用程序的源代码捆绑到DLL文件中。这样,您可以获得两个好处:

  • 源代码在DLL文件中是安全的。

  • 在许多情况下,应用程序的性能会得到提升。

  • 生成的可执行文件的大小很小。

我们在本教程中使用的是Windows,但大多数命令都可以在包括Linux和Mac在内的其他平台上按原样使用。

警告

构建依赖于平台!

例如,Windows版本不能在不同的操作系统上开箱即用。同样的道理也适用于构建在其他平台上的Linux和Mac。

您可以使用Mac或Linux系统为这些平台编译您的游戏。

要在不同于当前平台的平台上编译,您可以使用虚拟机或WINE/Proton。但是,这些选项并不受官方支持,本教程中也不包含这些选项。

编译简单的Arcade脚本#

对于本教程,我们将使用中的代码 简单平台

  • 首先,我们必须安装 Nuitka 使用以下命令:

pip install nuitka

我们将使用来自 this file

将该代码转换为独立的可执行文件非常简单:

python -m nuitka 17_views.py --standalone --enable-plugin=numpy

现在坐好,放松。最好去喝杯咖啡,因为编译需要时间,有时可能需要2个小时,这取决于您的机器的规格。该过程完成后,将有两个名为 17_views.py.dist17_views.py.build 将弹出。您现在可以安全地忽略Build文件夹。只需转到dis文件夹并运行 17_views.exe 文件,放在那里。如果没有错误,那么应用程序应该可以完美地工作。

祝贺你!您已经成功地将您的Python代码编译成了独立的可执行文件!

注意:如果要将代码编译为单个文件而不是文件夹,只需删除 standalone 标记并添加 onefile 旗帜!

但数据文件和文件夹又如何呢?#

有时,我们的应用程序还使用定制数据文件,其中可能包括声音效果、字体等。为了将它们与应用程序捆绑在一起,只需使用 include-data-fileinclude-data-dir 标志:

python -m nuitka 17_views.py --standalone --enable-plugin=numpy --include-data-file=C:/Users/Hunter/Desktop/my_game/my_image.png=.

这将复制名为的文件 my_image.png 位于可执行文件的根目录的指定位置。

要捆绑整个文件夹,请执行以下操作:

python -m nuitka 17_views.py --standalone --enable-plugin=numpy --include-data-dir=C:/Users/Hunter/Desktop/my_game/assets=.

这将复制名为的整个文件夹 assets 位于可执行文件的根目录的指定位置。

删除控制台窗口#

您可能已经注意到,在打开可执行文件时,会自动打开一个控制台窗口。尽管它对调试和错误很有帮助,但它看起来确实很难看。您可能会想,有没有一种方法可以强制控制台输出到日志文件?多亏了Nuitka,这也是可能的:

python -m nuitka 17_views.py --standalone --windows-force-stderr-spec=%PROGRAM%logs.txt --windows-force-stdout-spec=%PROGRAM%output.txt

这将自动创建两个文件,即 logs.txtoutput.txt 在将分别包含stderr和stdout输出的可执行目录中!

自定义任务栏图标怎么样?#

Nuitka为我们提供了 windows-icon-from-icowindows-icon-from-exe 旗帜( 因操作系统不同而有所不同 )以设置自定义图标。第一个标志接受一个 .png 或者是 .ico 文件并将其设置为应用程序图标:

python -m nuitka 17_views.py --standalone --windows-icon-from-ico=icon.png

这会将应用程序图标设置为icon.png

python -m nuitka 17_views.py --standalone --windows-icon-from-exe=C:\Users\Hunter\AppData\Local\Programs\Python\Python310/python.exe

这会将应用程序图标设置为PYTHON的图标😉

更多信息#

  • 本教程使用Nutika 0.7.x进行了测试。较晚的版本可能会奏效。