Compiling a Game with Nuitka¶
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 Bundling a Game with 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 is a tool which compiles your Python code to machine code directly, and bundles your application’s source code in dll files. This way, you get two benefits:
The source code is safe in dll files.
The application gets a performance boosts in many cases.
The resulting executable’s size is small.
We are using Windows for this tutorial, but most of the commands can be used as-it-is on other platforms including Linux and Mac.
Warning
Builds are platform dependent!
For example, a Windows build will not work out-of-the-box on a different OS. The same goes for Linux and Mac builds on other platforms.
You can use a Mac or a Linux system to compile your game for those platforms.
To compile for a different platform than your current one, you may be able to use a Virtual Machine or WINE/Proton. However, these options are not officially supported and are not covered in this tutorial.
Compiling a Simple Arcade Script¶
For this tutorial, we will use the code from Simple Platformer.
First, we have to install Nuitka with the following command:
pip install nuitka
We will be using the code from this file.
Converting that code to a standalone executable is as easy as:
python -m nuitka 17_views.py --standalone --enable-plugin=numpy
Now sit back and relax. Might as well go and grab a cup of coffee since compilation
takes time, sometimes maybe up to 2 hours, depending on your machine’s specs.
After the process is finished, two new folders named 17_views.py.dist
and
17_views.py.build
will popup. You can safely ignore the build folder for now.
Just go to the dis folder and run 17_views.exe
file , present in there. If there are no
errors, then the application should work perfectly.
Congratulations! You have successfully compiled your Python code to a standalone executable!
Note: If you want to compile the code to a single file instead of a folder, just remove the standalone
flag and add the onefile
flag!
But What About Data Files And Folders?¶
Sometimes, our application also uses custom data files which may include sound effects, fonts
etc… In order to bundle them with the application, just use the include-data-file
or
include-data-dir
flag:
python -m nuitka 17_views.py --standalone --enable-plugin=numpy --include-data-file=C:/Users/Hunter/Desktop/my_game/my_image.png=.
This will copy the file named my_image.png
at the specified location to the root of the executable.
To bundle a whole folder:
python -m nuitka 17_views.py --standalone --enable-plugin=numpy --include-data-dir=C:/Users/Hunter/Desktop/my_game/assets=.
This will copy the whole folder named assets
at the specified location to the root of the executable.
Removing The Console Window¶
You might have noticed that while opening the executable, a console window automatically opens. Even though it is helpful in debugging and errors, it does look ugly. You might think, is there a way to force the console output to a logs file? Well, thanks to Nuitka, this is also possible:
python -m nuitka 17_views.py --standalone --windows-force-stderr-spec=%PROGRAM%logs.txt --windows-force-stdout-spec=%PROGRAM%output.txt
This will automatically create two files, viz logs.txt
and output.txt
in the executable directory which will
contain the stderr and stdout output respectively!
What About A Custom Taskbar Icon?¶
Nuitka provides us with the windows-icon-from-ico
and windows-icon-from-exe
flags (varies for each OS)
to set custom icons.
The first flag takes a .png
or a .ico
file and sets it as the app icon:
python -m nuitka 17_views.py --standalone --windows-icon-from-ico=icon.png
This will set the app icon to icon.png
python -m nuitka 17_views.py --standalone --windows-icon-from-exe=C:\Users\Hunter\AppData\Local\Programs\Python\Python310/python.exe
This will set the app icon to Python’s icon 😉
Additional Information¶
This tutorial was tested with Nutika 0.7.x. Later releases are likely to work.