Unwanted Modules

The Problem in a Few Words

Some specific modules have a lot of dependencies, which then become part of the compilation. That will make compile time much longer and distribution size much bigger than necessary. The time increases might be due to an explosion in module count. DLLs from unwanted modules can also cause an increase in size.

Nuitka wants you to be aware of the issue so you are not disappointed by too long of a compile-time or too large of a distribution size.

Background

Nuitka gives this warning for some modules only. The worst offender currently is IPython which will use just about every syntax highlighting, language parsing, rendering, and more frameworks, leading to a compilation that takes a very long time. However, many packages import IPython and offers ways to integrate with it.

Another example is Numba. Nuitka does not support its JIT in standalone mode of Nuitka, but still pull in the dependencies that themselves require huge DLLs, while they are not going to be usable anyway.

Nuitka follows imports when you say so, and in standalone mode specifically, it is the default to do so. You can exclude specific packages or modules manually by inhibiting them with --nofollow-import-to=module_name, but that may not work, in which case, anti-bloat work is needed to eradicate this kind of imports. For common packages, these exist.

You appear to have come across code that is not yet dealt with.

Note

Checkout the Nuitka Package Configuration. page to find out how to help with anti-bloat additions. There are plenty of examples; if you need help, feel free to ask.

Example

Here is an example output where we import unittest to demonstrate the issue.

Nuitka-Plugins:WARNING: anti-bloat: Undesirable import of 'unittest' at 'Mini.py:1' encountered. It may slow down compilation.
Nuitka-Plugins:WARNING:     Complex topic! More information can be found at https://nuitka.net/info/unwanted-module.html

For unittest Nuitka gives the warning, because it appears you are including test code in your compilation, which is never a good thing. Often it has extra dependencies, and it can be a lot of code too.

Maybe you forced the inclusion of a whole package, which will also pull in its tests, and you should exclude those then. Perhaps you mixed test code and application code, and it’s normal for you. You can turn off the warning for specific ones with options like --noinclude-unittest-mode=allow that exists for each of these warnings. Naturally, you are subject to all the disadvantages mentioned.

Consequence

While you can ignore these warnings, it’s best to at least attempt to disable the following into the named module. Otherwise the warning can be disabled or ignored, it is not an error of any kind, just a strong pointer to get this resolved.

Recommendation

For best results, you should compile with --noinclude-default-mode=error and help to get your compilation error free by removing the problematic imports from 3rd party software with anti-bloat contributions.

Alternatively for popular packages, report the issue, and we might do it for you, but there are guides on how to do this, and ideally you contribute yourself.

If you do not care, you can add --noinclude-unittest-mode=allow or whatever options is triggering this.

If you really do not care, and do not want to see the message you can disable the mnemonic with --nowarn-mnemonic=unwanted-module and carry on, the warning will no longer show itself, but the impact of including too much in your compilation will persist and new instances will not be reported.