⚠ ATTENTION ⚠
À l'heure actuelle (2018-12-14), la dernière étape (compilation de PyQt5 avec MinGW-64), ne fonctionne pas.
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 Windows .
Notes :
- Toute la chaîne de compilation sera faite pour un système 64-bit.
- J'utiliserai les versions en cours de développement (SIP, Qt5 et PyQt5), donc pensez à adapter les liens de téléchargement.
Création du virtualenv
Commencez par créer un environnement de développement sain (Python 3.6.7 pour le coup) :
C:\Python36\python.exe -m venv --clear "%USERPROFILE%\venv"
rem Cette variable sera utilisée souvent par la suite
set PYTHON=%USERPROFILE%\venv\Scripts\python.exe
rem Et ces variables seront aussi utiles, pensez à les adapter
set Qt_PATH=F:\Qt\Qt5.12.0
set MINGW_PATH=%Qt_PATH%\Tools\mingw730_64
set PATH=%QT_PATH%\5.12.0\mingw73_64\bin;%MINGW_PATH%\bin;%PATH%
Dépendance n°1/2 : Qt5
Téléchargez Qt5 : qt-opensource-windows-x86-5.12.0.exe. Lors de l'installation, cochez ces options :
- Qt > MinGW 7.3.0 64-bit
- Tools > MinGW 7.3.0 64-bit
Dépendance n°2/2 : SIP
Téléchargez et décompressez les sources de SIP : sip-4.19.14.dev1812031459.zip. Rendez-vous dans le dossier et :
rem Configuration
%PYTHON% configure.py ^
--no-stubs ^
--platform="win32-g++" ^
CFLAGS+="-m64" ^
DEFINES+="MS_WIN64"
rem Compilation
mingw32-make -j 2
rem Installation
mingw32-make install
Compilation de PyQt5
⚠ Malheureusement, il se trouve que cette dernière étape n'est pas encore possible. Lors du make
, les symboles de Python ne seront pas trouvés :
release/qpycore_post_init.o:qpycore_post_init.cpp:(.text+0x6f): undefined reference to `__imp_PyDict_SetItemString'
release/qpycore_post_init.o:qpycore_post_init.cpp:(.text+0x158): undefined reference to `__imp_PyUnicode_FromString'
release/qpycore_post_init.o:qpycore_post_init.cpp:(.text+0x1a2): undefined reference to `__imp_PyDict_New'
release/qpycore_post_init.o:qpycore_post_init.cpp:(.text+0x206): undefined reference to `__imp__Py_Dealloc'
release/qpycore_post_init.o:qpycore_post_init.cpp:(.text+0x259): undefined reference to `__imp_Py_FatalError'
release/qpycore_post_init.o:qpycore_post_init.cpp:(.text+0x2bd): more undefined references to `__imp_Py_FatalError' follow
release/qpycore_post_init.o:qpycore_post_init.cpp:(.text+0x371): undefined reference to `__imp_PyDict_New'
Téléchargez et décompressez les sources de PyQt5 : PyQt5_gpl-5.12.dev1812081006.zip. Rendez-vous dans le dossier et :
rem 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 ^
--sip="%PYTHON_DIR%\sip.exe" ^
--spec="win32-g++" ^
--verbose ^
DEFINES+="MS_WIN64" ^
DEFINES+="_hypot=hypot" ^
QMAKE_CXXFLAGS+="-m64"
rem Compilation
mingw32-make -j 2
rem Installation
mingw32-make install
J'ai volontairement désactivé pas mal de composants, mais vous pouvez très bien les réactiver en supprimant les ligne --no-XXX
.
Tentez cette manipulation si vous rencontrez l'erreur :
...\lib\gcc\x86_64-w64-mingw32\7.3.0\include\c++\cmath:1157:11: error: '::hypot' has not been declared
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.