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 :
- J'utiliserai les versions en cours de développement, donc pensez à adapter les liens de téléchargement.
- 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).
- 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.