This release contains a large amount of performance work, that should specifically be useful on Windows, but also generally. A bit of scalability work has been applied, and as usual many bug fixes and small improvements, many of which have been in hotfixes.
dotenv
. Do not insist on compiled package directories that may not be there in case of no data files. Fixed in 1.2.1 already.ctypes.CDLL
node attributes the winmode
argument to Python2, which is wrong, it was actually added with 3.8. Fixed in 1.2.1 already.cl.exe
crashes or clcache
bugs. When these are reported by the linker, it now suggests to use the --clean-cache=ccache
which will remove it, otherwise there would be no way to cure it. Added in 1.2.1 already.folium
package. Added in 1.2.1 already.branca
package. Added in 1.2.1 already.try
that had exiting finally
branches were tracing values only assigned in the try
block incorrectly. Fixed in 1.2.2 already.libstdc++
for Alpine to not use the system one which is required by its other binaries, much like we already do for Anaconda. Fixed in 1.2.2 already.pytorch
. One of our workarounds no longer applies. Fixed in 1.2.2 already.opencv-python
. Fixed in 1.2.3 already.pytorch_lightning
, it was not finding metadata for rich
package. Fixed in 1.2.4 already.
For the release we found that pytorch_lightning
may not find rich
installed. Need to guard version()
checks in our package configuration.dash
package. Fixed in 1.2.4 already.clcache
entry after a delay, this works around Virus scanners giving access denied while they are checking the file. Naturally you ought to disable those for your build space, but new users often don’t have this. Fixed in 1.2.4 already.scipy
1.9.2 changes. Fixed in 1.2.4 already.gcc
as well and suggest to clean cache as well. This has been observed to happen at least on Windows and should help resolve the ccache
situation there.clcache
fails to acquire the global lock, simply ignore that. This happens sporadically and barely is a real locking issue, since that would require two compilations at the same time and for that it largely works.f_locals
set to the actual mapping used in their frame. This makes Nuitka usable with the multidispatch
package which tries to find methods there while the class is building.tk-inter
automatic detection. This was fixed in 1.2.6 already.lark
package. Fixed in 1.2.6 already.pkgutil.iter_modules
without arguments was given wrong compiled package names. Fixed in 1.2.6 already.clr
DLLs changes. Fixed in 1.2.7 already.tensorflow.compat
namespace not being available. Fixed in 1.2.7 already.tkextrafont
. Fixed in 1.2.7 already.timm
package. Fixed in 1.2.7 already.tls
to list of sensible plugins. This enables at least pyqt6
plugin to do networking with SSL encryption.sklearn.cluster
.fcopyfile
is no longer available on newest OS version, and include files for sendfile
have changed.--disable-cache
that accepts all
and cache names like ccache
, bytecode
and on Windows, dll-dependencies
with selective values.The clcache
is implied in ccache
for simplicity.
--disable-cache
Nuitka may now also be called with --clean-cache
in a compilation or without a filename argument, and then it will erase those caches current data before making a compilation.--macos-app-mode
option for application bundles that should run in the background (background
) or are only a UI element (ui-element
).when
allows now to check if a plugin is active. This allowed us to limit console warnings to only packages whose plugin was activated.tk-inter
no longer will you be asked about PySide6
plugin, as that is not what you are using apparently.tk-inter
as well, so it will now point out that wx
and the Qt bindings should be removed for best results, if they are included in the compilation.Resources
folder of application bundles.PyObject_Size
variant, that will be slightly faster and avoids DLL usage for len
and size hints, e.g. in container creations.malloc
related macros and functions of Python, and instead of the fasted form generally. This avoids Python DLL calls that on Windows can be particularly slow.frozenset
there was not need to check for hashable values, and some branches could be replaced with e.g. defining our own EllipsisType
for use in short paths.--jobs
much like C compilation already is. For large programs this will give big savings in overall execution time. Added in 1.2.7 already.pytest
for dash
package compilation.dotenv
, pyvista
, python_utils
, and trimesh
package compilation.rdkit
improving compile time for standalone by a lot. Fixed in 1.2.7 already.keras
testing framework when using that package.numpy
plugin functionality was moved to Nuitka package configuration, and as a result, the plugin is now deprecated and devoid of functionality. On non-Windows, this removes unused duplications of the numpy.core
DLLs.--help
output. These are there often only for historic reasons, e.g. when an option was renamed. They should not bother users reading them.pyside2
and pyqt5
plugins.description
values during their automatic check.--version
output to include the C compiler selection. It is doing that respecting your other options, e.g. --clang
, etc. so it will be helpful in debugging setup issues.
UI: Some error messages were using %r
rather than '%s'
to output file paths, but that escaped backslashes on Windows, making them look worse, so we changed away from this.--output-dir
actually controls.Foundation
module requires bundle mode to be usable.--follow-imports
and --nofollow-imports
on command line rather than erroring out. Simply use what was given last, this allows overriding what was given in project options tests should the need arise.--include-package-data
before compilation, removing the ability to use pattern. This makes it easier to recognize mistakes without a long compilation and plugins can know them this way too.pythonw
binary on Windows.--mingw64
mode. It had been like this, but the --help
output didn’t say so.main_module
tag. It cannot happen that a module name matches, and still thinks of itself as __main__
during compilation, so that idea was unnecessary.dict.copy()
, for deep copy (needed e.g. when there are escaping mutable keyword argument constant values in say a function call), and for **kw
value preparation in the called function (checking argument types), we have had diverged copies, that are now unified in a single Jinja2 template for optimization.Test
suffix, so in Visual Code selector they are more distinct from Nuitka code modules.if
branches at call side.PyDev
annotations, we don’t need those anymore for a long time already.arglist
, actually tuples are sufficient and naturally better to use.--diff
output usable for interactive usage.The major achievement of this release was the removal of the long lived numpy
plug-in, replacing it with package based configuration, that is even more optimal and works perfectly across all platforms on both important package installation flavors.
This release has a lot of consolidation efforts, but also as a result of 3.11 investigations, addresses a lot of issues, that have crept in over time with Python3 releases since 3.7, each time, something had not been noticed. There will more need for investigation of relative performance losses, but this should address the most crucial ones, and also takes advantage of optimization that had become with 3.10 already.
There is also some initial results from cleanups with the composite node tree structure, and how it is managed. Generated “child(ren) having” mixins, allow for faster traversal of the node tree.
Some technical things also improved in Scons. Using multiple cores in LTO with MSVC with help this a lot, although for big compilations --lto=no
probably has to be recommended still.
More anti-bloat
work on more packages rounds up the work.
For macOS specifically, the WebEngine support is crucial to some users, and the new --macos-app-mode
with more GUI friendly default resolves long standing problems in this area.
And for MSYS2 and FreeBSD, support has been re-activated, so now 4 OSes work extremely well (others too likely), and on those, most Python flavors work well.
The performance and scalability improvements are going to be crucial. It’s a pity that 3.11 is not yet supported, but we will be getting there.