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] [En construction: Modification 24/3/2015: simplification]

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

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!).

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…), 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:

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

Installation de PyQt5 dans l'environnement virtuel

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

  • si vous appelez c:\Python34\python.exe ⇒ vous aurez accès à PyQt4 (mais pas à PyQt5)
  • si vous appelez d:\pyenvqt5\Scripts\python.exe ⇒ vous aurez accès à PyQt5.

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 

Configuration des outils de développement

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!

pyqt4_et_pyqt5_sous_windows.1427188573.txt.gz · Dernière modification: 2015/03/24 10:16 de tyrtamos

Outils de la page