README for Debian python3-qtpy package
======================================

This README is designed for package maintainers whose packages depend
on python3-qtpy.

This metapackage allows developers to write Python Qt applications
that are agnositic about the backing Python Qt library, as described
in the package's README file.  The way the Python Qt is chosen is
described in that README file and, in more detail, in the
qtpy/__init__.py file.  In summary (and ignoring the PySide 2 library,
which is barely supported on Debian):

* If one of PyQt5, PyQt6 or PySide 6 (in that order) has already been
  imported when qtpy is first imported, then that library will be
  used.

* Otherwise, if the QT_API environment variable is set to one of
  "pyqt5", "pyqt6", "pyside6" and the requisite Python packages are
  installed, then that will be used.

* Otherwise, the first of "pyqt5", "pyqt6", "pyside6" with the
  requisite Python packages installed will be used.

The Debian python3-qtpy package does *not* depend on any Qt backend;
it is the responsibility of the package depending on python3-qtpy to
specify the needed dependencies.

To simplify this, there are three metapackages provided:
python3-qtpy-pyqt5, python3-qtpy-pyqt6 and python3-qtpy-pyside6 that
depend on the respective Python Qt libraries.  These metapackages pull
in many more dependencies than needed for most packages, though.

To determine the packages actually needed, a reasonable approach is:

(1) Decide which of PyQt5, PyQt6 or PySide 6 your package will depend
    on.  Unless you or the package author has manually specified
    anything other than PyQt5 via setting the QT_API environment
    variable in the code, this should be PyQt5.

(2) Identify the qtpy modules imported by your package, for example by
    running the code:

    rgrep qtpy | grep import | cut -d: -f2- | sort -u

    If all of the lines begin "from qtpy import " (or those that
    don't, for example "from qtpy.QtTest import *", are included
    within the others), then a list of qtpy imports can be obtained
    with:

    rgrep qtpy | grep import | cut -d: -f2- | grep 'from qtpy import' | sed -e 's/from qtpy import //' | perl -pe 's/, /\n/g;' | sort -u

    (There are probably simpler ways, but this does the job!)

(3) You will need to depend on:

    * python3-pyqt5              for PyQt5
    * python3-pyqt6              for PyQt6
    * python3-pyside6.qtcore
      python3-pyside6.qtgui
      python3-pyside6.qtopengl
      python3-pyside6.qtwidgets  for PySide 6

    In addition to these core packages, check the list of qtpy modules
    below to determine the additional packages required.  Not all Qt
    modules are provided by Debian for all three of these frameworks.
    The required packages are listed; those in square brackets are
    already listed above.

A script qtpy-get-dependencies is provided in the python3-qtpy package
which takes a list of QtPy imports and returns a list of the required
Debian packages.  By default, the PyQt5 packages are listed, but the
flags --pyqt6 or --pyside6 can be used to change this.  The overall
command line then becomes:

    qtpy-get-dependencies $(rgrep qtpy | grep import | cut -d: -f2- | grep 'from qtpy import' | sed -e 's/from qtpy import //' | perl -pe 's/, /\n/g;' | sort -u)


qtpy.Qsci
---------
python3-pyqt5.qsci
python3-pyqt6.qsci

qtpy.Qt3DAnimation
------------------
python3-pyside6.qt3danimation

qtpy.Qt3DCore
-------------
python3-pyside6.qt3dcore

qtpy.Qt3DExtras
---------------
python3-pyside6.qt3dextras

qtpy.Qt3DInput
--------------
python3-pyside6.qt3dinput

qtpy.Qt3DLogic
--------------
python3-pyside6.qt3dlogic

qtpy.Qt3DRender
---------------
python3-pyside6.qt3drender

qtpy.QtAxContainer
------------------

qtpy.QtBluetooth
----------------
python3-pyqt5.qtbluetooth
python3-pyqt6.qtbluetooth
python3-pyside6.qtbluetooth

qtpy.QtCharts
-------------
python3-pyqt5.qtchart
python3-pyqt6.qtcharts
python3-pyside6.qtcharts

qtpy.QtConcurrent
-----------------
python3-pyside6.qtconcurrent

qtpy.QtCore
-----------
[python3-pyqt5]
[python3-pyqt6]
[python3-pyside6.qtcore]
[python3-pyside6.qtgui]

qtpy.QtDataVisualization
------------------------
python3-pyside6.qtdatavisualization

qtpy.QtDBus
-----------
[python3-pyqt5]
[python3-pyqt6]
python3-pyside6.qtdbus

qtpy.QtDesigner
---------------
[python3-pyqt5]
python3-pyqt6.qtdesigner
python3-pyside6.qtdesigner

qtpy.QtGui
----------
[python3-pyqt5]
[python3-pyqt6]
[python3-pyside6.qtgui]
[python3-pyside6.qtopengl]
[python3-pyside6.qtwidgets]

qtpy.QtHelp
-----------
[python3-pyqt5]
python3-pyqt6.qthelp
python3-pyside6.qthelp

qtpy.QtLocation
---------------
python3-pyqt5.qtpositioning
(python3-pyside6.qtlocation is not supported by qtpy)

qtpy.QtMacExtras
----------------

qtpy.QtMultimedia
-----------------
python3-pyqt5.qtmultimedia
python3-pyqt6.qtmultimedia
python3-pyside6.qtmultimedia

qtpy.QtMultimediaWidgets
------------------------
python3-pyqt5.qtmultimedia
python3-pyqt6.qtmultimedia
python3-pyside6.qtmultimediawidgets

qtpy.QtNetworkAuth
------------------
python3-pyside6.qtnetworkauth

qtpy.QtNetwork
--------------
[python3-pyqt5]
[python3-pyqt6]
python3-pyside6.qtnetwork

qtpy.QtNfc
----------
python3-pyqt5.qtnfc
python3-pyqt6.qtnfc
python3-pyside6.qtnfc

qtpy.QtOpenGL
-------------
[python3-pyqt5]
python3-pyqt5.qtopengl
[python3-pyqt6]
[python3-pyside6.qtopengl]
[python3-pyside6.qtgui]

qtpy.QtOpenGLWidgets
--------------------
[python3-pyqt6]
python3-pyside6.qtopenglwidgets

qtpy.QtPdf
----------
python3-pyqt6.qtpdf
python3-pyside6.qtpdf

qtpy.QtPdfWidgets
-----------------
python3-pyqt6.qtpdf
python3-pyside6.qtpdfwidgets

qtpy.QtPositioning
------------------
python3-pyqt5.qtpositioning
python3-pyqt6.qtpositioning
python3-pyside6.qtpositioning

qtpy.QtPrintSupport
-------------------
[python3-pyqt5]
[python3-pyqt6]
python3-pyside6.qtprintsupport

qtpy.QtPurchasing
-----------------

qtpy.QtQml
----------
python3-pyqt5.qtquick
python3-pyqt6.qtqml
python3-pyside6.qtqml

qtpy.QtQuick3D
--------------
python3-pyqt6.qtquick3d
python3-pyside6.qtquick3d

qtpy.QtQuickControls2
---------------------
python3-pyside6.qtquickcontrols2

qtpy.QtQuick
------------
python3-pyqt5.qtquick
python3-pyqt6.qtquick
python3-pyside6.qtquick

qtpy.QtQuickWidgets
-------------------
python3-pyqt5.qtquick
python3-pyqt6.qtquick
python3-pyside6.qtquickwidgets

qtpy.QtRemoteObjects
--------------------
python3-pyqt5.qtremoteobjects
python3-pyqt6.qtremoteobjects
python3-pyside6.qtremoteobjects

qtpy.QtScxml
------------
python3-pyside6.qtscxml

qtpy.QtSensors
--------------
python3-pyqt5.qtsensors
python3-pyqt6.qtsensors
python3-pyside6.qtsensors

qtpy.QtSerialPort
-----------------
python3-pyqt5.qtserialport
python3-pyqt6.qtserialport
python3-pyside6.qtserialport

qtpy.QtSql
----------
python3-pyqt5.qtsql
[python3-pyqt6]
python3-pyside6.qtsql

qtpy.QtStateMachine
-------------------
python3-pyside6.qtstatemachine

qtpy.QtSvg
----------
python3-pyqt5.qtsvg
python3-pyqt6.qtsvg
python3-pyside6.qtsvg

qtpy.QtSvgWidgets
-----------------
python3-pyqt6.qtsvg
python3-pyside6.qtsvgwidgets

qtpy.QtTest
-----------
[python3-pyqt5]
[python3-pyqt6]
python3-pyside6.qttest

qtpy.QtTextToSpeech
-------------------
python3-pyqt5.qttexttospeech
(python3-pyqt6.qttexttospeech is not supported by qtpy)
(python3-pyside6.qttexttospeech is not supported by qtpy)

qtpy.QtUiTools
--------------
python3-pyside6.qtuitools

qtpy.QtWebChannel
-----------------
python3-pyqt5.qtwebchannel
python3-pyqt6.qtwebchannel
python3-pyside6.qtwebchannel

qtpy.QtWebEngineCore
--------------------
python3-pyqt5.qtwebengine
python3-pyqt6.qtwebengine
python3-pyside6.qtwebenginecore

qtpy.QtWebEngine
----------------
python3-pyqt5.qtwebengine

qtpy.QtWebEngineQuick
---------------------
python3-pyqt6.qtwebengine
python3-pyside6.qtwebenginequick

qtpy.QtWebEngineWidgets
-----------------------
python3-pyqt5.qtwebengine
python3-pyqt6.qtwebengine
python3-pyside6.qtwebenginewidgets
(python3-pyside6.qtwebenginecore is also needed, but is a dependency
of python3-pyside6.qtwebenginewidgets)

qtpy.QtWebSockets
-----------------
python3-pyqt5.qtwebsockets
python3-pyqt6.qtwebsockets
python3-pyside6.qtwebsockets

qtpy.QtWidgets
--------------
[python3-pyqt5]
[python3-pyqt6]
[python3-pyside6.qtgui]
[python3-pyside6.qtopengl]
[python3-pyside6.qtwidgets]

qtpy.QtWinExtras
----------------

qtpy.QtX11Extras
----------------
python3-pyqt5.qtx11extras

qtpy.QtXmlPatterns
------------------
python3-pyqt5.qtxmlpatterns

qtpy.QtXml
----------
[python3-pyqt5]
[python3-pyqt6]
python3-pyside6.qtxml

qtpy.shiboken
-------------
[should probably not be used directly]

qtpy.sip
--------
[should probably not be used directly]
[python3-pyqt5]
[python3-pyqt6]

qtpy.uic
--------
[python3-pyqt5]
python3-pyside6.qtuitools

 -- Julian Gilbey <jdg@debian.org>, Wed, 25 Dec 2024 11:12:32 +0000
