Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
pyqt4_et_pyqt5_sous_windows [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


pyqt4_et_pyqt5_sous_windows

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
pyqt4_et_pyqt5_sous_windows [2015/03/24 10:16]
tyrtamos
pyqt4_et_pyqt5_sous_windows [2015/04/16 07:38]
tyrtamos
Ligne 2: Ligne 2:
  
 [Python 3.4] [Python 3.4]
-[**En construction**: Modification 24/3/2015: simplification]+ 
 +[Modification le 16/4/2015: simplifications]
  
 ===== Problématique ===== ===== 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:+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:
   * maintenir les développements actuels en PyQt4,    * maintenir les développements actuels en PyQt4, 
   * préparer progressivement leur conversion en PyQt5,   * préparer progressivement leur conversion en PyQt5,
Ligne 21: Ligne 22:
 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 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)!+On considère qu'on a déjà un Python d'installé avec PyQt4ainsi que tous les modules dont on a besoin. On va **//utiliser un "environnement virtuel" pour installer PyQt5 en plus//**Ainsi: 
 +  * l'appel du Python normal aura la disponibilité de PyQt4 
 +  * l'appel du Python de l'environnement virtuel aura la disponibilité de PyQt5, ainsi que de tous les modules du Python normal.
  
-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!+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!). Cette méthode est issue d'une discussion sur le forum Python de developpez (merci à wiztricks!).
  
-===== Création et utilisation des environnements virtuels =====+A noter: on a considéré ici qu'on a déjà PyQt4 d'installé "normalement" et qu'on crée un environnement virtuel pour mettre PyQt5, 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à 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//**.+===== Création et utilisation de l’environnement virtuel =====
  
-On va créer un environnement virtuel pour recevoir PyQt5 dans le répertoire nommépar exempled:\pyenvqt5 comme suit avec la console de Windows (cmd.exe):+Nous avons, par exemple, le Python 3.4 installé ici: c:\python34. Il contient déjà PyQt4, ainsi que les modules généraux par rapport aux 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 exempled:\pyenvqt5 comme suit avec la console de Windows (cmd.exe):
  
 <code> <code>
Ligne 37: Ligne 42:
 </code> </code>
  
-Ça y eston a l'environnement virtuel! //Ça va, ce n'était pas trop douloureux?// ;-)+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).
  
-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).+Ç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:+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:
  
 <code> <code>
Ligne 48: Ligne 53:
 </code> </code>
  
-On voit aussi qu'il y a un répertoire "Lib\site-packages" qui contient déjà pipet qui pourra accueillir des modules externes installés, et en particulier ici PyQt5.+On voit aussi qu'il y a au même endroit pip et easy-install pour installer d'autres modules externes.
  
-L'utilisation de cet environnement virtuel est super-simple: il suffit pour exécuter un programme python quelconque "monprogramme.py" de faire:+On voit enfin qu'il y a le répertoire "Lib\site-packages" qui pourra accueillir des modules 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:
  
 <code python> <code python>
Ligne 56: Ligne 63:
 </code> </code>
  
-Pour installer des modules complémentaires dans l'un des 2 emplacements: c:\python34 ou d:\pyenvqt5, il suffit, selon la méthode d'installationd'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 installer des modules complémentaires dans l'emplacements: 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 le setup.py: "d:\pyenvqt5\Scripts\python.exe setup.exe install",  
 +  * ou, avec les binaires exe, de donner la bonne adresse d'installation.
  
-Pour détruire l'environnement virtuel, on fait:+Pour détruire l'environnement virtuel, après avoir désinstallé tout ce qu'on y a mis, on fait:
  
 <code> <code>
Ligne 69: Ligne 79:
  
  
-===== Installation de PyQt5 dans l'environnement virtuel =====+===== Installation de PyQt5 =====
  
 On passe maintenant aux choses sérieuses. On passe maintenant aux choses sérieuses.
  
-Je rappelle que le Python de base dispose déjà de PyQt4 installé.+Je rappelle que le Python de base n'a ici que PyQt4.
  
-Le binaire de PyQt5 à installer pour Windows est chez riverbank: [[http://www.riverbankcomputing.co.uk/software/pyqt/intro]].+Le PyQt5 en binaire à 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.+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.  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"+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. 
  
-Grâce à ça, on peut maintenant installer PyQt5 dans d:\pyenvqt5 sans problème!+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.
  
-Attentionil 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.+Il y a un dernier petit travail à faireapprendre 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.
  
-Après cette installation de PyQt5on peut constater dans les programmes installés que les 2 PyQt (4 et 5) sont bien reconnus par Windows.+Pour le PyQt4 de C:\Python34le qt.conf sera dans C:\Python34 et contiendra: 
 + 
 +<code> 
 +[Paths] 
 +Prefix = Lib/site-packages/PyQt4 
 +Binaries = . 
 +Plugins = plugins 
 +Translations = translations 
 +</code>
  
-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 traductionni ses pilotes SQL. On le fait en plaçant un petit fichier texte "qt.confdans le répertoire d:\pyenvqt5\Script, et qui contiendra:+Pour le PyQt5 de d:\pyenvqt5, le qt.conf sera dans d:\pyenvqt5\Scripts et contiendra:
  
 <code> <code>
Ligne 99: Ligne 119:
 </code> </code>
  
-Ça y est: **vous avez PyQt4 et PyQt5 en même temps!** Il vous suffit d'appeler le "bon python"+Ç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 PyQtpour exécuter un programme.
- +
-  * 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: A titre de vérification, vous pouvez lancer les démos de PyQt:
  
-Avec seulement le Python normal qui a PyQt4:+pour PyQt4:
  
 <code> <code>
Ligne 113: Ligne 129:
 </code> </code>
  
-et avec le python de l'environnement virtuel pour PyQt5:+et pour PyQt5:
  
 <code> <code>
Ligne 119: Ligne 135:
 </code> </code>
  
-===== Configuration des outils de développement =====+A noter: 
  
-On va configurer les outils de développement pour le Python normal ainsi que pour le Python de l'environnement virtuel.+  * puisque les programmes lancés avec le python de l'environnement virtuel ont accès aux modules externes installés dans le Python "normal" (celui de C:\Python34), on pourrait se dire qu'on a accès **//aussi//** à PyQt4: mais ça ne marche pas à cause de ces problèmes d'adresses des répertoires de PyQt placées dans qt.conf.  
 + 
 +  * puisqu'on réussi à installer PyQt4 et PyQt5 avec l'astuce de la modification du registre, on peut avoir l'idée d'installer les 2 dans le même Python C:\Python34, mais ça ne marche pas: il y a un fichier sip.pyd dans le répertoire site-packages qui est spécifique à chacun des PyQt. On retrouve bien la condition de Riverbank: pour avoir PyQt4 et PyQt5 en même temps sous Windows, il faut reconstruire (recompiler) à partir des sources avec la même version de sip! 
 + 
 +===== Configuration des appels ===== 
 + 
 +**__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:  
 +  * un double clic sur un fichier .py appellera C:\Python34\python.exe,  
 +  * un double clic sur un fichier .pyw appellera C:\Python34\pythonw.exe.  
 +  
 +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:__** **__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:+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":
  
 <code> <code>
-C:\eclipse\eclipse.exe -data d:\pydev+C:\eclipse\eclipse.exe -data d:\pydevqt4
 C:\eclipse\eclipse.exe -data d:\pydevqt5 C:\eclipse\eclipse.exe -data d:\pydevqt5
 </code>   </code>  
  
 Pour chacun de ces workspaces, on fait reconnaître le bon interpréteur Python: Pour chacun de ces workspaces, on fait reconnaître le bon interpréteur Python:
 +  * pour le workspace d:\pydevqt4, l'interpréteur python est: C:\Python34\python.exe
 +  * pour le workspace d:\pydevqt5, l'interpréteur python est: d:\pyenvqt5\Scripts\python.exe
  
-pour le workspace d:\pydev, l'interpréteur python est: d:\python34\python.exe +Avec la touche "Apply", pydev cherche les adresses supplémentairesvérifiez qu'il les a toutes et dans le bon ordresinon, modifiez-les:
-pour le workspace d:\pydevqt5l'interpréteur python est: d:\pyenvqt5\Scripts\python.exe+
  
-En principe, pydev trouve alors tous les chemins nécessaires.+Pour le workspace d:\pydevqt4 pour le développement avec PyQt4: 
 + 
 +<code> 
 +c:\python34 
 +c:\python34\DLLs 
 +c:\python34\lib 
 +c:\python34\Lib\site-packages 
 +</code> 
 + 
 +Et pour le workspace d:\pydevqt5 pour le développement avec PyQt5: 
 + 
 +<code> 
 +d:\pyenvqt5 
 +d:\pyenvqt5\Lib 
 +d:\pyenvqt5\Lib\site-packages 
 +c:\python34 
 +c:\python34\DLLs 
 +c:\python34\lib 
 +c:\python34\Lib\site-packages 
 +</code>
  
-Ça y est, vous pouvez travailler sous PyQt4 et PyQt5, et même simultanément à l'écran! +Ç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:__** **__Pour geany:__**
Ligne 151: Ligne 199:
 </code> </code>
  
-On aura ensuite 2 icônes geany sur le bureau: geany et geany_qt5 avec les commandes de lancement:+On aura ensuite 2 icônes geany sur le bureau: geany_qt4 et geany_qt5 avec les commandes de lancement:
  
 <code> <code>
Ligne 157: Ligne 205:
 c:\chemin\Geany.exe --new-instance --config=C:\Users\utilisateur\AppData\Roaming\geany_qt5 c:\chemin\Geany.exe --new-instance --config=C:\Users\utilisateur\AppData\Roaming\geany_qt5
 </code> </code>
- 
-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. Comme pour eclipse/pydev, on pourra avoir les 2 geany en même temps sur le bureau.
Ligne 164: Ligne 210:
 **__Pour idle:__** **__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+On peut toujours travailler avec l'idle du Python de base c:\python34, mais, bien sûr, seul PyQt4 sera disponible à l'importation:
- +
-Pour avoir idle avec PyQt4, il faudra lancer:+
  
 <code> <code>
-c:\python34\pythonw.exe c:\Python34\Lib\idlelib\idle.pyw+C:\Python34\pythonw.exe C:\Python34\Lib\idlelib\idle.pyw
 </code> </code>
  
-Et pour avoir idle avec PyQt5:+Et pour avoir idle avec PyQt5, il faut lancer le même idle.pyw, mais avec le Python.exe de l'environnement virtuel:
  
 <code> <code>
Ligne 180: Ligne 224:
 **__Pour les exécutables de PyQt:__** **__Pour les exécutables de PyQt:__**
  
-Il faudra bien sûr appeler les "bons" exécutables+Il faudra bien sûr appeler les "bons" exécutables:
- +
-Pour ceux de PyQt4:+
  
 <code> <code>
-d:\python34\Lib\site-packages\PyQt4\assistant.exe +C:\Python34\Lib\site-packages\PyQt4\assistant.exe 
-d:\python34\Lib\site-packages\PyQt4\designer.exe +C:\Python34\Lib\site-packages\PyQt4\designer.exe 
-d:\python34\Lib\site-packages\PyQt4\linguist.exe +C:\Python34\Lib\site-packages\PyQt4\linguist.exe 
-d:\python34\Lib\site-packages\PyQt4\pyuic4.bat +C:\Python34\Lib\site-packages\PyQt4\pyuic4.bat 
-d:\python34\Lib\site-packages\PyQt4\pyrcc4.exe +C:\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\assistant.exe
pyqt4_et_pyqt5_sous_windows.txt · Dernière modification: 2015/04/17 05:55 de tyrtamos