This release has had a focus on improved startup time and compatibility with lazy loaders which has resulted in some optimization. There are also the usual amounts of bug fixes.
Nuitka Action: Fix, the parsing code intended for the github action was not working as advertised. Fixed in 1.8.1 already.
Standalone: Follow soundfile
change for their DLL names. Fixed in 1.8.1 already.
MSYS: Fix, the recent change to detect their Python flavor with 3.11 was done wrong. Fixed in 1.8.1 already.
Windows: Ignore MS API DLLs found from %PATH%
. We only ignored them because they come from the Windows system folder, but if any program has them, then we did include them. Fixed in 1.8.1 already.
Standalone: Fix, calendar
is used by time
built-in module actually and therefore must be included. Fixed in 1.8.1 already.
Standalone: Added data file for unstructured
package. Fixed in 1.8.1 already.
Standalone: Added data file for grpc
package. Fixed in 1.8.1 already.
Standalone: Added missing dependency for skimage
. Fixed in 1.8.1 already.
Python3.11: The dictionary copy code could crash on special kinds of dictionaries. Fixed in 1.8.2 already.
Standalone: Added data file required by ens
of web3
package. Fixed in 1.8.2 already.
Fix, multiprocessing
could not access attributes living in __main__
module, but only things elsewhere, breaking minimal examples. Fixed in 1.8.2 already.
Reports: Fix, the license of some packages in case it is UNKNOWN
was not handling all the cases that wheels expose. Fixed in 1.8.2 already.
Fix, using --include-module
and --include-package
was behaving identical for packages. Made the former not include all of the package, but only the top level and what that uses.
Standalone: Added support for the lightning
package. Fixed in 1.8.3 already.
Distutils: Fix, the platform tag was sometimes incorrect for wheels built. Fixed in 1.8.3 already.
Compatibility: Make the PySide2/PySide6 signal connection workaround more robust. It was not handling reuse of the same method properly and insisted on changing __name__
which some objects apparently dislike a lot. Fixed in 1.8.4 already.
Windows: Fix, need to use short path for the Python installation prefix, as it might be unicode path as well. Fixed in 1.8.4 already.
Fix, output spec %NONE%
was not compiling anymore. Fixed in 1.8.4 already.
Reports: Avoid having short paths for DLL sources on Windows. Fixed in 1.8.4 already.
Fix, catch provided metadata from command line --include-distribution-metadata
without including the package at runtime. Fixed in 1.8.4 already.
Python3.10+: Fix, was not properly initializing indicator variable used in the match
re-formulation. The generated code still work, but this was an error on the logical level to use a variable un-initialized. Fixed in 1.8.4 already.
Standalone: Added missing DLLs for rlottie-python
. Fixed in 1.8.4 already.
Standalone: Added missing implicit dependencies and also avoid duplication of DLLs for the av
package. Fixed in 1.8.4 already.
Fix, was not handling errors when creating distribution objects. Fixed in 1.8.4 already.
macOS: Remove extended attributes from DLLs, e.g. finder
can add them and it prevents code signing. Fixed in 1.8.4 already.
macOS: Workaround for signing tkinter data files properly, we just exclude the problematic ones, as they are going to be unused. Fixed in 1.8.4 already.
Standalone: Added hidden dependency of curl_cffi
package. Fixed in 1.8.5 already.
Standalone: Added hidden dependency of tensorflow
package. Fixed in 1.8.5 already.
Standalone: Added more kivymd
data files. Fixed in 1.8.5 already.
Standalone: Added implicit dependency for winloop
package. Fixed in 1.8.6 already.
Windows: Fix, do not resolve main program executable filename to long filename. Fixed in 1.8.5 already.
Windows: Fix, ignore ucrtbase
runtime DLLs found from %PATH%
as well. Fixed in 1.8.6 already.
Compatibility: Fix, the dill-compat
plugin was regressed and support for dill
version 0.3 was added.
Fix, need to include package name for joblib
usage with --python-flag=-m
to work properly.
Windows: Added support for newest joblib
too, we no longer need to error for using the latest one.
Fix, attribute lookups becoming hard through node factories didn’t annotate possible exceptions.
Standalone: Added support for huggingface_hub
vendored lazy loader variant.
Standalone: Added support for datasets
module.
Plugins: Handle default plugin of matplotlib
a lot better. Be more graceful when the query of the default one fails, and point to MPLBACKEND
usage. Otherwise inform the user of the backend used for matplotlib
so it can be checked.
Fix, --include-module
on a package was including all of it rather than just top level, which was what it should do. For including the full package, there is --include-package
instead.
macOS: Fix, need to check dependencies for the selected target arch precisely, otherwise DLLs and extension modules for the other arch can cause errors for our dependency analysis in standalone mode.
MSYS2: Fix, the GTK DLL name changed again.
Compatibility: Added support for .zip
files being in python path as well.
Fix, when a sub-package module import is rejected for whatever reason, the programs attempt to import it, still implies an attempt to import the parent module. For extension modules in accelerated mode, this is of course common, but the containing package if any, is of course still to be included.
Fix, PySide6 in accelerated mode needs workarounds too, previously only standalone mode was avoiding the corruptions it was causing.
Fix, make the PySide2/PySide6 signal connection workaround also fix disconnection only. For signals that only ever got disconnected, but never connected, the workaround was not applied.
MSYS2: For standalone add more GI dlls.
Fix, inline copies of e.g. tqdm
could be detected during compilation and even in place of the real package.
Standalone: Added proper support for timm
without disabling JIT generally.
Python3.11: Fix, frozen stdlib modules must be turned off
Otherwise the value of os.__file__
becomes wrong, and maybe more issues, as Nuitka is more compatible to full modules than the frozen modules are for standalone mode at least.
Python2: Avoid RuntimeWarning when using inline copy of tqdm
.
Standalone: Added support for newer pydantic
and its lazy loader.
Standalone: Add config for font data files of qtawesome
package.
Plugins: Added workaround for PySide6 enums checking bytecode when some older enum values are used. The PySide6 means to detect method calls vs. type lookups to decide if to inject the default value for a flag value. With our workaround, enums behave as expected without that check being possible.
Standalone: Added support for gradio
package.
Python3.6+: Added support for non-latin (for example Chinese) module names, these were not working correctly yet.
Python3: Fix, star importing from modules with non-UTF8 encodable names in the module dictionary crashed.
Python2: Fix, couldn’t list directories with unicode filenames in them, so that e.g. a Python3 created build directory with unicode module names was not possible to fully delete.
Compatibility: Added missing as_posix
method to our resource reader objects.
Standalone: Added missing DLLs for PyAutoIt
package.
Standalone: Added data files for the flask_restx
package, for which --include-package-data
also wouldn’t work, due to its strange handling when running in frozen mode.
Standalone: Added more metadata requirements for transformers
package.
Standalone: Added support for newer transformers
package.
Standalone: Added data files for yapf
vendored lib2to3
package.
Plugins: Fix, was crashing on module patterns of submodules not existing in the yaml config implicit dependencies.
lazy
delayed loading, which removes the need for include-pyi-file
as we inline its effect at compile time. Also, the dependencies of these kinds of packages no longer need to be overreaching and can analyze the code again. This is using the hard import registry plugin interface.package-system-dlls
is configured, which will be necessary for GTK bindings probably. With this the included DLLs will more often be only ones suitable for use on other OSes. This should make Linux standalone somewhat easier, but still need to compile on old OS.installer
name, so we can tell pip, conda or system packages apart better.joblib
do not suddenly go wild on a break change in that or other packages.--list-package-dlls
now needs to check target arch options, so we now delay the non-compiling options execution until it’s set, which also makes it cleaner code. Also, we can now distinguish real Python extension modules from mere DLLs on macOS too.av
and cv2
DLL collisions, making it more generic.tk-inter
plugin more robust. Detect the tkinter version used and scan for its paths. Use path used when compiling tcl
from source and check data directory paths for tcl
and tk
for expected files, and error out if they are not found. With these changes self-compiled Python as e.g. used in our commercial Linux container is supported too now.list
, tuple
, dict
more compact, since they commonly have only a few elements, but we used 4 bytes for length, where the average should be close to one 1 byte per length item now.binutils
have apparently been fixed. This should now link a lot faster with LTO, due to using multiple processes.builtins.open
as hard import to open
.__slots__
for our classes. Variables, code generation context, iteration handles, and type shapes didn’t really use those and that should speed their use up and therefore reduce Python compile time and memory usage.textwrap
as it otherwise uses a runner code with test code that is bloating with hello world code.pytest
usage in pooch
package. Added in 1.8.1 already.pdb
usage from pyparsing
package. Added in 1.8.2 already.unittest
usage in bitarray
. module. Added in 1.8.2 already.lightning
to cause use of its lightning.testing
framework.torch
but only it can use unittest
, it will not work otherwise.IPython
in gradio
package.IPython
in altair
package.numba
in pyqtgraph
package.triton
in torch
package.unittest
in multiprocess
package.setuptools
with new “mmcv” package as well.libz
on Linux.isort
and rstchk
versions.--include-plugin-directory
documentation to make it more clear what it is usable for and what not.--include-plugin-directory
which is a frequent user error.--list-package-data
more understandable.
We already had a count for DLLs too, and should not list directory name in case it’s empty and has no data files, otherwise this can confuse people.imageio
plugins. Added in 1.8.4 already.--version
output as well.--enable-console
usage.--no-progressbar
and --no-progress-bar
being both accepted, forced long version of options for no good reason.--debug
output failed query command that a plugin made. In this way it is easier to check what is wrong about it for the user already.RuntimeError
when the program is attempting to use it.Py_Exit
call takes, which might be a while in some cases.win_target
mode, this is long obsolete.dill-compat
run time hook to separate file.pyproject.toml
tests, these fail to work on macOS at least.This is again massive in terms of new features supported. The lazy loader support is very important as it allows to handle more packages in better ways than just including everything.
The new added optimization are nice, esp. startup time will make a huge difference for many people, but mainly the focus was on supporting packages properly, and getting Nuitka-Watch to be able to detect breaking of packages from PyPI closer to when it happens.
And then of course, there is a tremendous amount of improvements for the UI, with lots features become even more rounded.
For Python 3.12 work has begun, but there is more to do for it. At this time it’s not clear how long it takes to add it. Stay tuned.