This file explains how we use our CMake-based build system and other tools to build dynamically loaded python extension modules implementing PLplot support for either Python 3 (preferred because it generally is less buggy/better supported than Python 2 these days) or Python 2. I. Selection of Python 3 or Python 2: Because of the above fundamental preference our build system first searches for the Python 3 executable (unless the user specifies -DFORCE_PYTHON2=ON). But if it cannot find a Python 3 executable or the user has specified -DFORCE_PYTHON2=ON it will search for a Python 2 executable. If a Python executable is found our build system uses that executable to find the Python library and numpy extension corresponding to that executable. II. plplotc.py and _plplotc.so These files (where plplotc.py wraps _plplotc.so) constitute the plplotc Python extension that implements our raw Python binding. This extension is automatically generated by swig using the PLplot API specified in bindings/swig-support/plplotcapi.i (which also controls the swig-generated PLplot bindings that are implemented for Java, Lua, and Octave). The details of how swig treats that API for the Python case are handled by plplotc.i (and fragments.i which was copied from swig version 1.3.21 to keep the returned tuple style flat rather than hierarchical). Our build system then runs swig to generate plplotcPYTHON_wrap.c, build and install _plplotc.so from that source code, and generate and install a wrapper for the extension module called plplotc.py. III. plplot.py This file is our hand-crafted wrapper for plplotc.py that adds some useful functionality (e.g., additional variations of the argument lists) to what is available for plplotc.py. This is the module that should be imported by users. IV. Pltk_init.py and _Pltk_init.so These files (where Pltk_init.py wraps _Pltk_init.so) constitute the Pltk_init Python extension that implements loading loading plframe from Python. This extension is automatically generated by swig using Pltk_init.i. Actual use of this extension is demonstrated by examples/python/pytkdemo which imports Plframe which in turn imports TclSup. V. plplot_pyqt4.so This extension module (only available for Qt4) implements pyqt4 support for PLplot. Our build system builds it in bindings/qt_gui/pyqt4 using sip-generated source files. VI. plplot_pyqt5.so This extension module (only available for Qt5) implements pyqt5 support for PLplot. Our build system builds it in bindings/qt_gui/pyqt5 using sip-generated source files.