Ceci est une ancienne révision du document !
[Python 3.4] [En construction: Modification 24/3/2015: simplification]
PyQt vient de passer de la version 4 à la version 5 avec une rupture de compatibilité: les programme 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).
En plus du PyQt4 qui restera installé avec le Python “normal, on va créer un répertoire contenant un environnement virtuel, et on va y installer PyQt5. On verra qu'en appelant le Python de l'environnement virtuel, on aura accès aux 2 PyQt (4 et 5)!
La difficulté principale est que l'éditeur de PyQt (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. On va voir la méthode pour contourner cet obstacle!
Cette méthode est issue d'une discussion sur le forum Python de developpez (merci à wiztricks!).
Nous avons, par exemple, le Python 3.4 installé ici: c:\python34. Il contient déjà les modules généraux par rapport aux utilisations qu'on en a, par exemple: scipy, numpy, matplotlib, cython, cx_freeze (, etc…), ainsi que PyQt4.
On va créer un environnement virtuel pour recevoir PyQt5 dans le répertoire nommé, par exemple, d:\pyenvqt5 comme suit avec la console de Windows (cmd.exe):
c:\python34\python.exe -m venv d:\pyenvqt5
Ça y est: on a l'environnement virtuel! Ça va, ce n'était pas trop douloureux?
On va faire une petite correction du fichier pyvenv.cfg qui se trouvent maintenant à la racine de cet environnement virtuel: mettre “include-system-site-packages” à “true” au lieu de “false”: l'avantage est que les programmes lancés sous cet environnement auront ainsi accès aux modules externes installés dans le python normal (c:\python34).
Quand on regarde ce qu'il y a dedans, on voit qu'il y a les exécutables python:
d:\pyenvqt5\Scrips\python.exe d:\pyenvqt5\Scrips\pythonw.exe
On voit aussi qu'il y a un répertoire “Lib\site-packages” qui contient déjà pip, et qui pourra accueillir des modules externes installés, et en particulier ici PyQt5.
L'utilisation de cet environnement virtuel est super-simple: il suffit pour exécuter un programme python quelconque “monprogramme.py” de faire:
d:\pyenvqt5\Scripts\python.exe monprogramme.py
Pour installer des modules complémentaires dans l'un des 2 emplacements: c:\python34 ou d:\pyenvqt5, il suffit, selon la méthode d'installation, d'utiliser le bon pip (l'environnement virtuel a le sien), ou le bon python.exe si on utilise “python setup.exe install”, ou, avec les binaires exe, de donner la bonne adresse d'installation.
Pour détruire l'environnement virtuel, 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 dispose déjà de PyQt4 installé.
Le binaire de PyQt5 à installer pour Windows est chez riverbank: http://www.riverbankcomputing.co.uk/software/pyqt/intro.
Mais si vous lancez maintenant l'installation de PyQt5 pour le mettre dans l'environnement virtuel “d:\pyenvqt5”, ç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 prend l'éditeur de registre “regedit.exe”, et avec lui, on va mettre à “chaine vide” cette adresse “C:\Python34”!
Grâce à ça, on peut maintenant installer PyQt5 dans d:\pyenvqt5 sans problème!
Attention: il faudra remettre cette adresse en place au même endroit dans le registre après l'installation de PyQt5, parce que la désinstallation de PyQt4 (pour mise à jour par exemple) aura absolument besoin de cette adresse.
Après cette installation de PyQt5, on peut constater dans les programmes installés que les 2 PyQt (4 et 5) sont bien reconnus par Windows.
Il y a un dernier petit travail à faire: apprendre à PyQt5 où se trouvent ses éléments! Si on ne le fait pas, il ne trouvera pas ses fichiers de traduction, ni ses pilotes SQL. On le fait en plaçant un petit fichier texte “qt.conf” dans le répertoire d:\pyenvqt5\Script, et qui 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”:
A titre de vérification, vous pouvez lancer les démos de PyQt:
Avec seulement le Python normal qui a PyQt4:
C:\Python34\pythonw.exe C:\Python34\Lib\site-packages\PyQt4\examples\demos\qtdemo\qtdemo.pyw
et avec le python de l'environnement virtuel pour PyQt5:
d:\pyenvqt5\Scripts\pythonw.exe d:\pyenvqt5\Lib\site-packages\PyQt5\examples\qtdemo\qtdemo.pyw
On va configurer les outils de développement pour le Python normal ainsi que pour le Python de l'environnement virtuel.
Pour Eclipse + pydev:
On peut avoir 2 workspaces (2 répertoires d:\pydev 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:
C:\eclipse\eclipse.exe -data d:\pydev C:\eclipse\eclipse.exe -data d:\pydevqt5
Pour chacun de ces workspaces, on fait reconnaître le bon interpréteur Python:
pour le workspace d:\pydev, l'interpréteur python est: d:\python34\python.exe pour le workspace d:\pydevqt5, l'interpréteur python est: d:\pyenvqt5\Scripts\python.exe
En principe, pydev trouve alors tous les chemins nécessaires.
Ça y est, vous pouvez travailler sous PyQt4 et PyQt5, et même simultanément à l'écran!
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 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 suffira de lancer chacune de ces 2 instances, et de mettre le bon Python pour l'outil de construction.
Comme pour eclipse/pydev, on pourra avoir les 2 geany en même temps sur le bureau.
Pour idle:
On peut toujours travailler avec l'idle du Python de base c:\python34, mais, bien sûr, PyQt5 sera alors inaccessible à l'importation!
Pour avoir idle avec PyQt4, il faudra lancer:
c:\python34\pythonw.exe c:\Python34\Lib\idlelib\idle.pyw
Et pour avoir idle avec PyQt5:
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.
Pour ceux de PyQt4:
d:\python34\Lib\site-packages\PyQt4\assistant.exe d:\python34\Lib\site-packages\PyQt4\designer.exe d:\python34\Lib\site-packages\PyQt4\linguist.exe d:\python34\Lib\site-packages\PyQt4\pyuic4.bat d:\python34\Lib\site-packages\PyQt4\pyrcc4.exe et pour ceux de PyQt5: 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:\pyenvqt4\Lib\site-packages\PyQt5\pyuic5.bat d:\pyenvqt4\Lib\site-packages\PyQt5\pyrcc5.exe
Etc…
Amusez-vous bien!