mirror of
https://github.com/Nuitka/Nuitka.git
synced 2025-12-14 20:35:49 +01:00
197 lines
6.6 KiB
ReStructuredText
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.
|