Contribuer à un projet FOSS comme PyQt5 peut en rebuter certains au vu de tout le travail à faire en amont. Voici un petit guide pour mettre en place un environnement de développement complet et isolé pour PyQt5 sous GNU/Linux .

Notes :

  1. J'utiliserai les versions en cours de développement, donc pensez à adapter les liens de téléchargement.
  2. Python ne peut pas charger un module compilé de manière statique, donc il faut bosser avec une version non statique de Qt (comme c'est le cas la plupart du temps).
  3. Rendez-vous sur cet article pour compiler une version non statique de Qt5.

Création du virtualenv

Commencez par créer un environnement de développement sain (Python 3.6.8rc1 pour le coup) :

$ python -m venv --clear "$HOME/venv"
$ source "$HOME/venv/bin/activate"

Compilation de SIP

Téléchargez et décompressez les sources de SIP : sip-4.19.14.dev1812031459.tar.gz. Rendez-vous dans le dossier et :

# Configuration
$ python configure.py --sip-module="PyQt5.sip"

# Compilation
$ make -j 6

# Installation
$ make install

Testez :

>>> from PyQt5.sip import SIP_VERSION_STR
>>> SIP_VERSION_STR
"4.19.14.dev1812031459"

Compilation de PyQt5

Téléchargez et décompressez les sources de PyQt5 : PyQt5_gpl-5.12.dev1812131446.tar.gz. Rendez-vous dans le dossier et :

# Configuration
$ python configure.py \
    --confirm-license \
    --no-designer-plugin \
    --no-docstrings \
    --no-python-dbus \
    --no-qml-plugin \
    --no-qsci-api \
    --no-sip-files \
    --no-stubs \
    --no-tools \
    --qmake="$HOME/sources/Qt-5.12.0/bin/qmake" \
    --sip="$VIRTUAL_ENV/bin/sip" \
    --verbose \
    DEFINES+="_hypot=hypot"

# Compilation
$ make -j 6

# Installation
$ make install

J'ai volontairement désactivé pas mal de composants, mais vous pouvez très bien les réactiver en supprimant les lignes --no-XXX.

Testez :

>>> import PyQt5.QtCore
>>> PyQt5.QtCore.PYQT_VERSION_STR
"5.12.dev1812131446"
>>> PyQt5.QtCore.QT_VERSION_STR
"5.12.0"

Hacking

Vous pouvez maintenant améliorer le code source de PyQt. Une fois vos modifications terminées, relancez la compilation et l'installation de PyQt5.
Ré-intérez jusqu'à ce que voys ayez un patch digne de ce nom et envoyez-le via la mailing-list.