This release contains massive amounts of corrections for long standing issues
in the import recursion mechanism, as well as for standalone issues now visible
__path__ values have changed to become runtime
__path__attribute for packages was still the original filename's directory, even in file reference mode was
The use of
runtimeas default file reference mode for executables, even if not in standalone mode, was making acceleration harder than necessary. Changed to
originalfor that case. Fixed in 0.5.11.1 already.
The constant value for the smallest
intthat is not yet a
longis created using
1due to C compiler limitations, but
1was not yet initialized properly, if this was a global constant, i.e. used in multiple modules. Fixed in 0.5.11.2 already.
Standalone: Recent fixes around
__path__revealed issues with PyWin32, where modules from
win32com.shellwere not properly recursed to. Fixed in 0.5.11.2 already.
The importing of modules with the same name as a built-in module inside a package falsely assumed these were the built-ins which need not exist, and then didn't recurse into them. This affected standalone mode the most, as the module was then missing entirely. This corrects Issue#178.
Similarly, the importing of modules with the same name as standard library modules could go wrong. This corrects Issue#184.
Importing modules on Windows and macOS was not properly checking the checking the case, making it associate wrong modules from files with mismatching case. This corrects Issue#188.
Standalone: Importing with
from __future__ import absolute_importwould prefer relative imports still. This corrects Issue#187.
Python3: Code generation for
finallycould loose exceptions when
exprraised an exception, leading to a
NULLreturn value. The real exception was lost.
Lambda expressions that were directly called with star arguments caused the compiler to crash.
Focusing on compile time memory usage, cyclic dependencies of trace merges that prevented them from being released, even when replaced were removed.
More memory efficient updating of global SSA traces, reducing memory usage during optimization by ca. 50%.
Code paths that cannot and therefore must not happen are now more clearly indicated to the backend compiler, allowing for slightly better code to be generated by it, as it can tell that certain code flows need not be merged.
Standalone: On systems, where
.pthfiles inject Python packages at launch, these are now detected, and taking into account. Previously Nuitka did not recognize them, due to lack of
__init__.pyfiles. These are mostly pip installations of e.g.
--explain-importsto debug the import resolution code of Nuitka.
--show-memoryto display the amount of memory used in total and how it's spread across the different node types during compilation.
--trace-executionnow also covers early program initialisation before any Python code runs, to ease finding bugs in this domain as well.
Changed default for file reference mode to
originalunless standalone or module mode are used. For mere acceleration, breaking the reading of data files from
Added check that the in-line copy of scons is not run with Python3, which is not supported. Nuitka works fine with Python3, but a Python2 is required to execute scons.
Discover more kinds of Python2 installations on Linux/macOS installations.
Added instructions for macOS to the download page.
odictmodules which provide ordered sets and dictionaries into a new package
nuitka.containerto clean up the top level scope.
nuitka.treepackage, where it is used to format error messages.
nuitka.utils.Utilscreating a whole package for utils, so as to better structure them for their purpose.
This release is a major maintenance release. Support for namespace modules
*.pth is a major step for new compatibility. The import logic
improvements expand the ability of standalone mode widely. Many more use cases
will now work out of the box, and less errors will be found on case insensitive
There is aside of memory issues, no new optimization though as many of these improvements could not be delivered as hotfixes (too invasive code changes), and should be out to the users as a stable release. Real optimization changes have been postponed to be next release.