Outils pour utilisateurs

Outils du site


pyqt4_et_pyqt5_sous_windows

Ceci est une ancienne révision du document !


Avoir en même temps PyQt4 et PyQt5 sous Windows

[Python 3.4]

Problématique

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:

  • maintenir les développements actuels en PyQt4,
  • préparer progressivement leur conversion en PyQt5,
  • et développer les nouveaux programmes directement PyQt5

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”.

Principe de solution

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 va donc créer 2 répertoires contenant chacun un environnement virtuel. On installera PyQt4 dans l'un et PyQt5 dans l'autre. L'appel du python.exe de l'un ou l'autre de ces environnements mettra à disposition du programme python lancé le bon PyQt ainsi que tous les modules déjà installés dans le Python “normal”.

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 2 méthodes pour contourner cet obstacle!

Cette méthode est issue d'une discussion sur le forum Python de developpez (merci à wiztricks!).

Création et utilisation des environnements virtuels

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… Par contre, si on a déjà l'un des PyQt (4 ou 5): il faut le désinstaller!

On va créer les 2 environnements virtuels dans les répertoires nommés (par exemple) d:\pyenvqt4 et pyenvqt5 comme suit avec la console de Windows (cmd.exe):

c:\python34\python.exe -m venv d:\pyenvqt4
c:\python34\python.exe -m venv d:\pyenvqt5

On va faire une petite correction des fichiers pyvenv.cfg qui se trouvent maintenant à la racine de ces 2 environnements virtuels: 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).

Ça y est: on a les 2 environnements virtuels! Ç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:

d:\pyenvqt4\Scrips\python.exe
d:\pyenvqt4\Scrips\pythonw.exe

d:\pyenvqt5\Scrips\python.exe
d:\pyenvqt5\Scrips\pythonw.exe

On voit aussi que les 2 ont des répertoires “Lib\site-packages” qui pourront accueillir des modules installés, et en particulier nos PyQt.

L'utilisation est super-simple: il suffit pour exécuter un programme python quelconque “monprogramme.py” de faire:

d:\pyenvqt4\Scripts\python.exe  monprogramme.py

ou:

d:\pyenvqt5\Scripts\python.exe monprogramme.py

Il faudra peut-être faire en sorte que l'interpréteur possède toutes les adresses lui permettant de trouver toutes les importations dont le programme a besoin, y compris si les modules font partie du Python de base c:\python34: voir la variable d'environnement PYTHONPATH.

Pour installer des modules complémentaires dans l'un des 3 emplacements: c:\python34, d:\pyenqt4 ou d:\pyenvqt5, il suffit, selon la méthode d'installation, d'utiliser le bon pip (chaque 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 les environnements virtuels, on fait:

c:\python34\python.exe -m venv --clear d:\pyenvqt4
c:\python34\python.exe -m venv --clear d:\pyenvqt5

Pour en connaître plus sur les environnements virtuels: voir la doc:

https://docs.python.org/3/library/venv.html#module-venv

Méthode avec modification du registre

On passe maintenant aux choses sérieuses.

Je rappelle que le Python de base ne doit avoir ni PyQt4 ni PyQt5. Si nécessaire, on désinstalle celui qui y est.

Les PyQt4 et PyQt5 en binaire à installer pour Windows sont chez riverbank: http://www.riverbankcomputing.co.uk/software/pyqt/intro.

On installe PyQt4 dans d:\pyenvqt4. 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:\pyenvqt4”.

Une fois l'installation terminée, vous pouvez vérifier qu'ont été ajoutés lors de l'installation le répertoire “d:\pyenvqt4\Lib\site-packages\PyQt4” et le fichier “d:\pyenvqt4\Lib\site-packages\sip.pyd”.

Mais si vous lancez maintenant l'installation de PyQt5 pour le mettre dans “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: “d:\pyenvqt4”. 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 “d:\pyenvqt4”! Grâce à ça, l'installation de PyQt5 dans d:\pyenvqt5 se déroulera sans broncher.

Attention: il faudra remettre cette adresse 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! On le fait en plaçant un petit fichier texte “qt.conf” dans le sous-répertoire Script (au même niveau que python.exe) et qui contiendra pour d:\pyenvqt4:

[Paths]
Prefix = ../Lib/site-packages/PyQt4
Binaries = .
Plugins = plugins
Translations = translations

et pour d:\pyenvqt5:

[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 le programme.

A titre de vérification, vous pouvez lancer les démos de PyQt:

pour PyQt4:

d:\pyenvqt4\Scripts\pythonw.exe  d:\pyenvqt4\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 

Méthode sans toucher au registre

Pour ceux qui ne veulent pas toucher au registre, voilà comment faire:

Rappel: si on a PyQt installé avec le Python de base c:\python34: on le désinstalle.

Pour PyQt4:

  • on installe PyQt4 dans l'environnement virtuel “d:\pyenvqt4”. On utilise le mode “Custom” et non “Full” pour pouvoir donner la bonne adresse d'installation “d:\pyenvqt4”.
  • on recopie dans un répertoire temporaire d\pyenvqt4\Lib\site-packages\PyQt4 et d\pyenvqt4\Lib\site-packages\sip.pyd.
  • on désinstalle PyQt4
  • on remet le répertoire PyQt4 et le fichier sip.pyd à leur place d'origine dans d\pyenvqt4\Lib\site-packages.

On fait la même chose pour PyQt5 (et comme PyQt4 a été désinstallé, l'installation de PyQt5 réussira!):

  • on installe PyQt5 dans l'environnement virtuel d:\pyenvqt5. On utilise le mode “Custom” et non “Full” pour pouvoir donner la bonne adresse d'installation “d:\pyenvqt5”.
  • on recopie dans un répertoire temporaire d\pyenvqt5\Lib\site-packages\PyQt5 et d\pyenvqt5\Lib\site-packages\sip.pyd.
  • on désinstalle PyQt5
  • on remet le répertoire PyQt5 et le fichier sip.pyd à leur place d'origine dans d\pyenvqt5\Lib\site-packages.

Donc: pour Windows, PyQt4 et PyQt5 n'existent pas en tant que logiciels installés: mais ils sont tout de même là, et ils sont parfaitement fonctionnels!

Une réserve cependant sur cette méthode: si un module externe supplémentaire devait être installé plus tard et nécessitait l'installation préalable de PyQt, peut-être que ce serait plus difficile (puisque pour Windows, PyQt n'est pas installé), et il faudrait alors plutôt choisir la méthode précédente avec modification du registre.

On termine comme avec la solution précédente en plaçant le fichier qt.conf au même niveau que Python.exe (dans Scripts), et contenant la même chose pour que les PyQt puissent retrouver leurs petits.

pour d:\pyenvqt4:

[Paths]
Prefix = ../Lib/site-packages/PyQt4
Binaries = .
Plugins = plugins
Translations = translations

et pour d:\pyenvqt5:

[Paths]
Prefix = ../Lib/site-packages/PyQt5
Binaries = .
Plugins = plugins
Translations = translations

Et c'est tout!

A titre de vérification, vous pouvez lancer les démos de PyQt dans une console (cmd.exe):

pour PyQt4:

d:\pyenvqt4\Scripts\pythonw.exe  d:\pyenvqt4\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 

Configuration des appels

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:

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:

pour le workspace d:\pydevqt4, l'interpréteur python est: d:\pyenvqt4\Scripts\python.exe pour le workspace d:\pydevqt5, l'interpréteur python est: d:\pyenvqt5\Scripts\python.exe

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:

d:\pyenvqt4
d:\pyenvqt4\Lib\site-packages
c:\python34
c:\python34\DLLs
c:\python34\lib
c:\python34\Lib\site-packages

Et pour le workspace d:\pydevqt5:

d:\pyenvqt5
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!

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

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, les PyQt seront alors inaccessibles à l'importation!

Pour avoir idle avec PyQt4, il faudra lancer:

d:\pyenvqt4\Scripts\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:

d:\pyenvqt4\Lib\site-packages\PyQt4\assistant.exe
d:\pyenvqt4\Lib\site-packages\PyQt4\designer.exe
d:\pyenvqt4\Lib\site-packages\PyQt4\linguist.exe
d:\pyenvqt4\Lib\site-packages\PyQt4\pyuic4.bat
d:\pyenvqt4\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:\pyenvqt4\Lib\site-packages\PyQt5\pyuic5.bat
d:\pyenvqt4\Lib\site-packages\PyQt5\pyrcc5.exe

Etc…


Amusez-vous bien!

pyqt4_et_pyqt5_sous_windows.1427199561.txt.gz · Dernière modification: 2015/03/24 13:19 de tyrtamos

Outils de la page