Files
nuitka-mirror/Standard-Plugins-Documentation.rst
2024-12-18 10:56:01 +01:00

197 lines
6.6 KiB
ReStructuredText

#######################################
Nuitka Standard Plugins Documentation
#######################################
.. |ups| replace::
user plugins
.. |sps| replace::
standard plugins
.. |ops| replace::
optional standard plugins
****************************
Background: Nuitka Plugins
****************************
Plugins are a feature to modify the way how Nuitka compiles Python
programs in extremely flexible ways.
Plugins can automatically include data files and additional shared
libraries, import modules which are not detectable by source code
analysis, modify or extend the to-be-compiled source code, gather
statistics, change Nuitka's parameter defaults and much more.
Any number of plugins may be used in each compilation.
Plugins come in two variants: **standard** plugins and **user** plugins.
User plugins are not part of the Nuitka package: they must be provided
otherwise. To use them in a compilation, Nuitka must be able to find
them using their path / filename. If |ups| are specified, Nuitka will
activate them **before** it activates any of its standard plugins.
Standard plugins are part of the Nuitka package and thus always
available.
Nuitka also differentiates between "mandatory" and "optional" |sps|.
**Mandatory** |sps| are always enabled and "invisible" to the user.
Their behavior cannot be influenced other than by modifying them.
**Optional** |sps| must be enabled via the command line parameter
``--enable-plugin=name``, with an identifying string ``name``. Even when
not enabled however, |ops| can detect, whether their use might have been
"forgotten" and issue an appropriate warning.
Where appropriate, the behaviour of optional |sps| (like with |ups|) can
be controlled via *options* (see "Using Plugin Options").
*******************
A Word of Caution
*******************
Almost all |ops| are relevant for standalone mode only. Specifying all
the right plugins is up to the user and critical for success: For
example, if you are using package *numpy* and forget to activate that
plugin, then your compile will
- end with no error, but a warning about missing numpy support,
- not generate a working binary.
Also:
- |ups| are able to programmatically enable |ops|, the **reverse is not
possible**. The user must know the requirements of his script and
specify all appropriate |ops|, including any required *options* (see
below).
- There is currently no way to automatically react to
interdependencies. For example, when compiling a script using the
*tensorflow* package in standalone mode, you must enable (at least)
**both**, the ``tensorflow`` **and** the ``numpy`` plugin.
- Like every compiler, Nuitka cannot always decide, whether a script
will **actually execute** an *import* statement. This knowledge must
be provided by you, e.g. with PGO information that is going to be
supported.
***********************************
List of Optional Standard Plugins
***********************************
Create a list of available optional |sps| giving their identifier
together with a short description via ``--plugin-list``:
The following optional standard plugins are available in Nuitka:
.. code::
anti-bloat Patch stupid imports out of widely used library modules source codes.
data-files
data-hiding Commercial: Hide program constant Python data from offline inspection of created binaries.
datafile-inclusion-ng Commercial: Load file trusted file contents at compile time.
dill-compat
enum-compat
ethereum Commercial: Required for ethereum packages in standalone mode
eventlet Support for including 'eventlet' dependencies and its need for 'dns' package monkey patching
gevent Required by the gevent package
gi Support for GI dependencies
glfw Required for glfw in standalone mode
implicit-imports
multiprocessing Required by Python's multiprocessing module
numpy Required for numpy, scipy, pandas, matplotlib, etc.
pbr-compat
pkg-resources Resolve version numbers at compile time.
pmw-freezer Required by the Pmw package
pylint-warnings Support PyLint / PyDev linting source markers
pyqt5 Required by the PyQt5 package.
pyside2 Required by the PySide2 package.
pyside6 Required by the PySide6 package for standalone mode.
pyzmq Required for pyzmq in standalone mode
tensorflow Required by the tensorflow package
tk-inter Required by Python's Tk modules
torch Required by the torch / torchvision packages
traceback-encryption Commercial: Encrypt tracebacks (de-Jong-Stacks).
windows-service Commercial: Create Windows Service files
.. note::
This list is continuously growing and most likely out of date.
*****************************************
Optional Standard Plugins Documentation
*****************************************
dill-compat
===========
- Required by the *dill* module. Dill extends Python's pickle module
for serializing and de-serializing objects.
- Options: none.
eventlet
========
- Required by the *eventlet* package. Eventlet is a concurrent
networking library.
- Options: none.
gevent
======
- Required by the *gevent* package. Gevent is a coroutine-based Python
networking library that uses greenlet to provide a high-level
synchronous API.
- Options: none.
pmw-freezer
===========
- Required by the *Pmw* package. Pmw is a toolkit for building
high-level compound widgets.
- Options: none.
pylint-warnings
===============
- Support *PyLint* / *PyDev* linting source markers. Python static code
analysis tools which help enforcing a coding standard.
- Options: none
pyside2, pyside6, pyqt5, pyqt6
==============================
- Required by the *PySide* and *PyQt* and GUI packages, only one can be
activated at a time.
- Options: With ``--include-qt-plugins`` you can select which Qt
plugins to include. By default a relatively small set, called
``sensible`` that is defined in the code is include, but you can add
more, and even ``all``, which will add a terrible amount of
dependencies though. But without the proper Qt plugins, functionality
of Qt might be broken, crashes can occur, or appearance can be
inferior.
- These plugins also inhibit other GUI frameworks from being included
in standalone distributions.
tk-inter
========
- Required by Python's Tk modules.
- Options: Can override the automatic detection of Tcl and Tk
directories with ``--tk-library-dir`` and ``--tcl-library-dir`` but
that should not be needed.