[Python 3.4]
[Modification le 16/4/2015: simplifications]
PyQt vient de passer de la version 4 à la version 5 avec une rupture de compatibilité: les programmes PyQt4 doivent être modifiés pour être utilisés avec PyQt5. Sous Windows, il faudrait donc, pendant quelques mois, pouvoir en même temps:
Le problème est que sous Windows on utilise le plus souvent les binaires (.exe) pour installer, et que l'éditeur de PyQt (Riverbank) dit qu'il n'est pas possible d'avoir en même temps PyQt4 et PyQt5! La seule possibilité pour ça serait de reconstruire PyQt4 et PyQt5 à partir des sources et avec la même version de sip: ce qui est beaucoup plus compliqué (compilation C++)!
La solution ci-dessous permet de faire mentir l'éditeur: on aura bien PyQt4 et PyQt5 opérationnels en même temps sous le même Windows!
Comme il s'agit d'installation, il faudra, bien sûr, les droits “administrateur”.
On va utiliser les “environnements virtuels” qui font partie de Python 3.3 et 3.4 maintenant grâce au module “venv” (les versions antérieures peuvent télécharger des solutions équivalentes).
On considère qu'on a déjà un Python d'installé avec PyQt4, ainsi que tous les modules dont on a besoin. On va utiliser un “environnement virtuel” pour installer PyQt5 en plus. Ainsi:
La difficulté principale est que Riverbank a ajouté une sécurité: lorsque PyQt4 est installé, la tentative d'installer en plus PyQt5 échoue, parce que le programme d'installation trouve dans le registre de Windows qu'un PyQt est déjà présent. Le contraire est vrai aussi si on veut installer PyQt4 alors que PyQt5 est déjà installé. On va voir comment contourner cet obstacle!
Cette méthode est issue d'une discussion sur le forum Python de developpez (merci à wiztricks!): http://www.developpez.net/forums/f96/autres-langages/python-zope/.
A noter: on considére ici qu'on a déjà PyQt4 d'installé “normalement” et qu'on crée un environnement virtuel pour mettre PyQt5 en plus, mais on peut aussi faire le contraire: PyQt5 installé normalement et PyQt4 dans l'environnement virtuel. Ce sera d'ailleurs la solution future la plus pratique lorsque PyQt5 sera la bibliothèque “normale” et qu'on voudra avoir PyQt4 “en plus” pour essayer les anciens programmes.
Nous avons, par exemple, le Python 3.4 installé ici: C:\Python34. Il contient déjà PyQt4, ainsi que les modules externes pour couvrir les utilisations qu'on en a, par exemple: scipy, numpy, matplotlib, cython, cx_freeze, etc…
On va créer un environnement virtuel dans un répertoire nommé, par exemple, D:\pyenvqt5 comme suit avec la console de Windows (cmd.exe):
C:\Python34\python.exe -m venv D:\pyenvqt5
On va faire une petite correction du fichier pyvenv.cfg qui se trouve maintenant à la racine de ce répertoire: mettre include-system-site-packages à “true” au lieu de “false”: l'avantage est que les programmes lancés sous cet environnement virtuel auront ainsi accès aux modules externes installés dans le python normal (C:\Python34).
Ça y est: on a l'environnement virtuel destiné à recevoir PyQt5! Ça va, ce n'était pas trop douloureux?
Quand on regarde ce qu'il y a dedans, on voit qu'il y a les exécutables python dans le sous-répertoire Scripts:
D:\pyenvqt5\Scrips\python.exe D:\pyenvqt5\Scrips\pythonw.exe
On voit aussi qu'il y a au même endroit pip et easy-install pour installer d'autres modules externes.
On voit enfin qu'il y a le répertoire “Lib\site-packages” qui pourra accueillir des modules externes installés, et en particulier notre PyQt5. Ainsi d'ailleurs que n'importe quel autre module qu'on voudrait installer en plus!
L'utilisation est super-simple: il suffit pour exécuter un programme python quelconque “monprogramme.py” avec le Python de l'environnement virtuel de faire dans une console cmd:
D:\pyenvqt5\Scripts\python.exe monprogramme.py
Pour installer des modules complémentaires soit dans le python normal C:\Python34, soit dans l'environnement virtuel D:\pyenvqt5, il suffit, selon la méthode d'installation:
Pour détruire l'environnement virtuel, après avoir désinstallé tout ce qu'on y a mis, on fait:
C:\Python34\python.exe -m venv --clear D:\pyenvqt5
Pour en connaître plus sur les environnements virtuels: voir la doc:
On passe maintenant aux choses sérieuses.
Je rappelle que le Python de base n'a ici que PyQt4.
Le PyQt5 en binaire à installer pour Windows est chez riverbank: http://www.riverbankcomputing.co.uk/software/pyqt/intro.
On installe PyQt5 dans D:\pyenvqt5. Attention: au début de l'installation, il y a un mode “Full” qui est proposé qui ne convient pas: il faut sélectionner “Custom”: c'est ça qui permettra de choisir l'adresse où il faut installer qui est “D:\pyenvqt5”.
Mais ça ne marche pas: il trouve l'installation précédente de PyQt4 dans le registre et refuse d'aller plus loin.
En fait, l'installation de PyQt4 a créé dans le registre les clés suivantes: “PyQt4\py3.4\InstallPath” avec la valeur: “C:\Python34”. Sous Windows 8.1 64 bits et Python 3.4 32 bits, ces clés se trouvent dans “HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node”. Pour d'autres configurations, cherchez: le principe est le même.
Alors, on exécute l'éditeur de registre “regedit.exe”, et avec lui, on va mettre à “chaine vide” cette adresse “C:\Python34”! Grâce à ça, l'installation de PyQt5 dans D:\pyenvqt5 se déroulera sans broncher.
Attention: il faudra remettre cette même adresse à “C:\Python34” après l'installation de PyQt5, parce que la désinstallation de PyQt4 (pour mise à jour par exemple) aura absolument besoin de cette adresse.
Il y a un dernier petit travail à faire: apprendre aux 2 PyQt où se trouvent leurs éléments! C'est justifié par le fait que les parties “Qt” contiennent des adresses “codées en dur”, qui sont fausses dans le cas de “PyQt”.On le fait en plaçant un petit fichier texte “qt.conf” dans le répertoire qui contient l'exécutable Python.
Pour le PyQt4 de C:\Python34, le qt.conf sera dans C:\Python34 et contiendra:
[Paths] Prefix = Lib/site-packages/PyQt4 Binaries = . Plugins = plugins Translations = translations
Pour le PyQt5 de D:\pyenvqt5, le qt.conf sera dans D:\pyenvqt5\Scripts et contiendra:
[Paths] Prefix = ../Lib/site-packages/PyQt5 Binaries = . Plugins = plugins Translations = translations
Ça y est: vous avez PyQt4 et PyQt5 en même temps! Il vous suffit d'appeler le “bon python” (celui qui a le bon PyQt) pour exécuter un programme.
A titre de vérification, vous pouvez lancer les démos de PyQt:
pour PyQt4:
C:\Python34\pythonw.exe C:\Python34\Lib\site-packages\PyQt4\examples\demos\qtdemo\qtdemo.pyw
et pour PyQt5:
D:\pyenvqt5\Scripts\pythonw.exe D:\pyenvqt5\Lib\site-packages\PyQt5\examples\qtdemo\qtdemo.pyw
A noter:
Pour exécuter les programmes Python .py et .pyw:
Puisqu'on a toujours le Python “normal” en C:\Python34, il est logique de laisser le branchement des fichiers python sur celui-ci. Ainsi, dans l'explorateur de fichiers Windows:
Seuls les programmes python nécessitant PyQt5 devront être lancés impérativement par le python de l'environnement virtuel: D:\pyenvqt5\Scripts\python.exe pour les programmes .py et D:\pyenvqt5\Scripts\pythonw.exe pour les programmes .pyw.
Pour Eclipse + pydev:
On peut avoir 2 workspaces (2 répertoires D:\pydevqt4 et D:\pydevqt5) pour porter les projets de PyQt4 pour l'un et PyQt5 pour l'autre. Et on a sur le bureau 2 icônes de lancement: eclipse_qt4 et eclipse_qt5 avec les workspaces comme argument précédé de l'option “-data”:
C:\eclipse\eclipse.exe -data D:\pydevqt4 C:\eclipse\eclipse.exe -data D:\pydevqt5
Pour chacun de ces workspaces, on fait reconnaître le bon interpréteur Python:
Avec la touche “Apply”, pydev cherche les adresses supplémentaires: vérifiez qu'il les a toutes et dans le bon ordre, sinon, modifiez-les:
Pour le workspace D:\pydevqt4 pour le développement avec PyQt4:
C:\Python34 C:\Python34\DLLs C:\Python34\lib C:\Python34\Lib\site-packages
Et pour le workspace D:\pydevqt5 pour le développement avec PyQt5:
D:\pyenvqt5 D:\pyenvqt5\Lib D:\pyenvqt5\Lib\site-packages C:\Python34 C:\Python34\DLLs C:\Python34\lib C:\Python34\Lib\site-packages
Ça y est, vous pouvez travailler sous PyQt4 et PyQt5, et même simultanément à l'écran, car vous pouvez avoir les 2 fenêtres “eclipse” en même temps!
Pour geany:
On peut avoir 2 geany chacun travaillant avec le bon python, et donc la bonne bibliothèque PyQt.
Pour ça, il faut recopier sous un autre nom (geany_qt5 par exemple) le répertoire geany qui se trouve ici dans le home de l'utilisateur en cours (vous!):
C:\Users\utilisateur\AppData\Roaming\geany
On aura ensuite 2 icônes geany sur le bureau: geany_qt4 et geany_qt5 avec les commandes de lancement:
c:\chemin\Geany.exe --new-instance --config=C:\Users\utilisateur\AppData\Roaming\geany c:\chemin\Geany.exe --new-instance --config=C:\Users\utilisateur\AppData\Roaming\geany_qt5
Il faudra, bien sûr, déclarer le bon Python à utiliser dans chacun de ces cas dans le fichier de configuration “filetypes.common”.
Comme pour eclipse/pydev, on pourra avoir les 2 geany en même temps sur le bureau (c'est l'option “–new-instance” qui permet ça).
Pour idle:
On peut toujours travailler avec l'idle du Python de base C:\Python34, mais, bien sûr, seul PyQt4 sera disponible à l'importation:
C:\Python34\pythonw.exe C:\Python34\Lib\idlelib\idle.pyw
Et pour avoir idle avec PyQt5, il faut lancer le même idle.pyw, mais avec le Python.exe de l'environnement virtuel:
D:\pyenvqt5\Scripts\pythonw.exe C:\Python34\Lib\idlelib\idle.pyw
Pour les exécutables de PyQt:
Il faudra bien sûr appeler les “bons” exécutables:
C:\Python34\Lib\site-packages\PyQt4\assistant.exe C:\Python34\Lib\site-packages\PyQt4\designer.exe C:\Python34\Lib\site-packages\PyQt4\linguist.exe C:\Python34\Lib\site-packages\PyQt4\pyuic4.bat C:\Python34\Lib\site-packages\PyQt4\pyrcc4.exe D:\pyenvqt5\Lib\site-packages\PyQt5\assistant.exe D:\pyenvqt5\Lib\site-packages\PyQt5\designer.exe D:\pyenvqt5\Lib\site-packages\PyQt5\linguist.exe D:\pyenvqt5\Lib\site-packages\PyQt5\pyuic5.bat D:\pyenvqt5\Lib\site-packages\PyQt5\pyrcc5.exe
Etc…
Amusez-vous bien!