IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Avoir en même temps PyQt 4 et PyQt 5 avec les environnements virtuels sous Windows ?


Sujet :

PyQt Python

  1. #21
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Essayez de mettre l'emphase sur:

    Quand cette installation est terminée, on reprend regedit.exe car il faut remettre l'adresse d:\pyenvqt4 qu'on a mis à vide précédemment: en effet, une future désinstallation de PyQt4 aura besoin de cette adresse.
    Le soucis est que la désinstallation fonctionne en virant tout ce qu'il peut sauf ce qu'il y a dans le site-specs.
    => on est dans un état incohérent ou il va falloir faire le ménage à la main.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  2. #22
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour wiztricks,

    C'est fait, merci!

    N'hésite pas à faire d'autres remarques si nécessaire pour améliorer le tuto!
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #23
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par tyrtamos Voir le message
    N'hésite pas à faire d'autres remarques si nécessaire pour améliorer le tuto!
    A vérifier mais, les manips concernant qt.conf ne semblent être utiles que lorsqu'on installe PyQt5 dans un venv.
    => à priori PyQt4 n'en a pas besoin.

    L'idéal serait de faire un tuto sur comment installer PyQt5 dans un venv.
    Puis un autre sur comment installer PyQt4 et PyQt5 dans 2 venv différents sur le même Windows renvoyant au précédent.

    Une autre option pourrait être d'installer 2 fois Python 3.4 (i.e. dans des répertoires différents), et d'installer PyQt4 dans l'un, PyQt5 dans l'autre.
    Dans ce cas, plus besoin de parler de qt.conf

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #24
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    A vérifier mais, les manips concernant qt.conf ne semblent être utiles que lorsqu'on installe PyQt5 dans un venv.
    => à priori PyQt4 n'en a pas besoin.
    Si: lorsqu'on n'utilise pas qt.conf, les programmes PyQt4 ne trouvent pas 2 choses:

    - les fichiers de traduction (donc, les boites de messages demandent "yes / not" au lieu de "oui / non")

    - les pilotes de SGBD qui se trouvent dans plugins.

    J'ai d'ailleurs été surpris de constater que ça a été oublié dans les pythons portables qui ont PyQt4.

    Citation Envoyé par wiztricks Voir le message
    L'idéal serait de faire un tuto sur comment installer PyQt5 dans un venv.
    Je ne sais pas si c'est ça que tu veux dire, mais j'avais l'idée de laisser PyQt4 avec le python normal, et de mettre seulement PyQt5 dans l'environnement virtuel: cela simplifierait sérieusement la manip. Je vais essayer.

    Citation Envoyé par wiztricks Voir le message
    Une autre option pourrait être d'installer 2 fois Python 3.4 (i.e. dans des répertoires différents), et d'installer PyQt4 dans l'un, PyQt5 dans l'autre.
    2 Pythons identiques sur Windows? Et pas de pb de registre? Ça me parait risqué. Je préfère la solution précédente.

    Merci!
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #25
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Si: lorsqu'on n'utilise pas qt.conf, les programmes PyQt4 ne trouvent pas 2 choses:

    - les fichiers de traduction (donc, les boites de messages demandent "yes / not" au lieu de "oui / non")

    - les pilotes de SGBD qui se trouvent dans plugins.

    J'ai d'ailleurs été surpris de constater que ça a été oublié dans les pythons portables qui ont PyQt4.
    Lorsqu'on installe PyQt, les emplacements des plugins et des fichiers de traductions ne sont pas renseignés dans qt.conf.
    A mon sens, ces choses la sont d'abord spécifiques à l'application et PyQt va chercher le premier truc qu'il trouve dans le PATH.

    On peut bien sûr ajouter cela dans le qt.conf "par défaut".
    Mais çà répond à d'autres besoins que seulement installer pyqt4 et pyqt5 sur le même environnement.

    Citation Envoyé par tyrtamos Voir le message
    Je ne sais pas si c'est ça que tu veux dire, mais j'avais l'idée de laisser PyQt4 avec le python normal, et de mettre seulement PyQt5 dans l'environnement virtuel: cela simplifierait sérieusement la manip. Je vais essayer.
    Si ma théorie est bonne, il serait encore plus simple d'installer PyQt5 dans le Python normal et PyQt4 sur le venv.

    Citation Envoyé par tyrtamos Voir le message
    2 Pythons identiques sur Windows? Et pas de pb de registre? Ça me parait risqué. Je préfère la solution précédente.
    Pour les opérations "normales", il n'y a pas plus de soucis qu'avec les "venv": installer et desinstaller des packages dans la bonne racine.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #26
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour wiztricks,

    Citation Envoyé par wiztricks Voir le message
    Si ma théorie est bonne, il serait encore plus simple d'installer PyQt5 dans le Python normal et PyQt4 sur le venv.
    Je ne comprends pas pourquoi: peux-tu m'expliquer?

    [Edit] Je confirme que la solution "PyQt4 dans le Python normal + PyQt5 dans l'environnement virtuel" est pleinement fonctionnelle. Comme ça simplifie la manip, ça devient la meilleure solution. La modification temporaire du registre pour PyQt4 reste bien sûr nécessaire pour que PyQt5 puisse s'installer. Je suppose que la solution inverse "PyQt5 dans le Python normal + PyQt4 dans l'environnement virtuel" fonctionne aussi.

    Après ta réponse à ma question ci-dessus, je mettrai à jour le tuto.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  7. #27
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Je ne comprends pas pourquoi: peux-tu m'expliquer?
    Pour ne pas avoir à mettre à jour "qt.conf" après l'installation de PyQt5

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #28
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    @wiztricks,

    Citation Envoyé par tyrtamos Voir le message
    Je confirme que la solution "PyQt4 dans le Python normal + PyQt5 dans l'environnement virtuel" est pleinement fonctionnelle. Comme ça simplifie la manip, ça devient la meilleure solution. La modification temporaire du registre pour PyQt4 reste bien sûr nécessaire pour que PyQt5 puisse s'installer. Je suppose que la solution inverse "PyQt5 dans le Python normal + PyQt4 dans l'environnement virtuel" fonctionne aussi.
    Ça a l'air de marcher, mais pas suffisamment: je suis en train de revenir à la solution précédente: PyQt4 et PyQt5 chacun dans un environnement virtuel.

    Le problème est sur le qt.conf. Ce fichier est indispensable, autant pour PyQt4 que pour PyQt5. En effet, la notice des 2 versions dit bien "The qt.conf file can be used to override the hard-coded paths that are compiled into the Qt library". Et en effet, sans le qt.conf, les adresses internes au PyQt sont cherchées dans c:\Qt\... et cette dernière, bien sûr, n'existe pas avec PyQt!

    Avec PyQt, le seul endroit où un fichier qt.conf est lu et exploité se trouve dans le même répertoire que le python.exe qu'on a lancé. Ce qui fait que si c'est le python.exe de l'environnement virtuel qui est lancé, les programmes PyQt5 fonctionnent mais pas les programmes PyQt4 parce que les adresses interne au PyQt4 du python normal (c:\python34) ne sont pas bonnes.

    Bref, ça ne marche pas.

    Une idée?

    [Edit] Complément au message ci-dessus.

    J'ai donc PyQt4 dans le Python normal (c:\python34), et PyQt5 dans un environnement virtuel (d:\pyenvqt5)

    Je lance un programme PyQt5 à partir du python de l'environnement virtuel sans aucun qt.conf, les adresses internes connues par PyQt5 sont:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    C:/Qt/5.4.1/bin
    C:/Qt/5.4.1/lib
    C:/Qt/5.4.1/plugins
    C:/Qt/5.4.1/translations
    Ces adresses codées en dur dans Qt n'existent pas.

    Je lance un programme PyQt4 à partir du même Python: les adresses internes connues par PyQt4 sont:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    C:\Qt\4.8.6\bin
    C:\Qt\4.8.6\lib
    C:\Qt\4.8.6\plugins
    C:\Qt\4.8.6\translations
    Ces adresses codées en dur dans Qt n'existent pas.

    Je mets maintenant un qt.conf dans le même répertoire que le Python de l'environnement virtuel et contenant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [Paths]
    Prefix = ../Lib/site-packages/PyQt5
    Binaries = .
    Libraries = .
    Plugins = ./plugins
    Translations = ./translations
    Je lance un programme PyQt5 à partir du python de l'environnement virtuel avec ce qt.conf, les adresses internes connues par PyQt5 sont:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    d:/pyenvqt5/Lib/site-packages/PyQt5
    d:/pyenvqt5/Lib/site-packages/PyQt5
    d:/pyenvqt5/Lib/site-packages/PyQt5/plugins
    d:/pyenvqt5/Lib/site-packages/PyQt5/translations
    Et ces adresses sont correctes!

    Je lance un programme PyQt4 à partir du même Python mais avec ce même qt.conf: les adresses internes connues par PyQt4 sont:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    d:/pyenvqt5/Lib/site-packages/PyQt5
    d:/pyenvqt5/Lib/site-packages/PyQt5
    d:/pyenvqt5/Lib/site-packages/PyQt5/plugins
    d:/pyenvqt5/Lib/site-packages/PyQt5/translations
    Et ces adresses sont bien sûr complètement fausses pour PyQt4!
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  9. #29
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    J'ai l'impression que nous ne parlons pas des mêmes choses.

    Citation Envoyé par tyrtamos Voir le message
    Avec PyQt, le seul endroit où un fichier qt.conf est lu et exploité se trouve dans le même répertoire que le python.exe qu'on a lancé. Ce qui fait que si c'est le python.exe de l'environnement virtuel qui est lancé, les programmes PyQt5 fonctionnent mais pas les programmes PyQt4 parce que les adresses interne au PyQt4 du python normal (c:\python34) ne sont pas bonnes.
    Techniquement, python.exe est l'exécutable qui lance l'application Qt...
    Donc, çà fait comme le raconte la documentation.

    Et nous avons un bug dans l'installer de PyQt4/PyQt5 qui pose un qt.conf dans le répertoire racine du venv plutôt que dans Scripts.

    Dans la pratique, si on installe PyQt4 dans un venv, ce bug n'est pas gênant car on peut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> from PyQt4.QtGui import QApplication, QWidget
    >>> app = QApplication([])
    >>> w = QWidget()
    >>> w.show()
    >>>
    sans soucis.

    Par contre, les réorganisations introduites dans Qt5, font que cela plante avec PyQt5:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> from PyQt5.QtWidgets import QApplication
    >>> QApplication([])
    This application failed to start because it could not find or load the Qt platfo
    rm plugin "windows".
     
    Reinstalling the application may fix this problem.
    Pour le corriger, il faut créer un qt.conf dans Scripts avec les bonnes entrées.

    Si vous relisez la documentation du qt.conf dans le détail, on devrait pouvoir installer PyQt4 et PyQt5 dans le même venv.
    Dans ce cas, le qt.conf devrait ressembler à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [Paths/4]
    Prefix = ../Lib/site-packages/PyQt4
    Binaries = ../Lib/site-packages/PyQt4
    [Paths/5]
    Prefix = ../Lib/site-packages/PyQt5
    Binaries = ../Lib/site-packages/PyQt5
    Mais çà ne fonctionne pas (et c'est pas si grave pour le programmeur Python).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #30
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour wiztricks, et merci pour la réponse.

    Nous parlons bien de la même chose, parce que j'ai déjà vu et fait tout ça!

    Je rappelle que ma tentative de simplification consiste à
    - avoir PyQt4 dans le Python 3.4 normalement installé
    - mettre PyQt5 dans un venv
    - pouvoir lancer un programme PyQt4 ET PyQt5 à partir du Python du venv.

    Citation Envoyé par wiztricks Voir le message
    Pour le corriger, il faut créer un qt.conf dans Scripts avec les bonnes entrées.
    Oui => c'est fait, mais si les adresses permettent de lancer un programme PyQt5, celles-ci deviennent fausses pour lancer un programme PyQt4: ça ne marche pas.

    J'ai eu l'espoir de mettre dans le qt.conf un [Paths/4] et [Paths/5] mais ça ne marche pas non plus (et c'est bien dommage).


    Citation Envoyé par wiztricks Voir le message
    Si vous relisez la documentation du qt.conf dans le détail, on devrait pouvoir installer PyQt4 et PyQt5 dans le même venv.
    Eh non: ça n'est pas possible: on ne peut pas mettre PyQt4 et PyQt5 dans le même site-packages parce que la 2ème installation place son sip.pyd qui écrase celui du 1er: c'est pour ça que la seule solution est de reconstruire à partir des sources avec le même sip!

    Bon: j'ai assez cherché comme ça: on a 2 solutions:

    1- une solution avec un seul venv pour PyQt5:
    • un Python 3.4 avec PyQt4
    • PyQt5 dans un venv

    On appelle un programme Python graphique PyQt4 avec le python 3.4 normal
    On appelle un programme Python graphique PyQt5 avec le python du venv PyQt5.

    (NB: même si le venv a accès aux modules du Python normal (scipy, numpy, ...) et donc à PyQt4, l'appel d'un programme PyQt4 avec le python du venv PyQt5 ne marchera pas à cause des adresses fausses)

    2-la solution du tuto avec 2 venv pour PyQt4 et PyQt5:
    • un Python 3.4 sans PyQt
    • PyQt4 dans un venv
    • PyQt5 dans un autre venv

    On appelle un programme Python graphique PyQt4 avec le python du venv PyQt4.
    On appelle un programme Python graphique PyQt5 avec le python du venv PyQt5.


    Comme je travaille encore beaucoup avec PyQt4, j'adopte provisoirement la solution 1.

    Merci!
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/10/2009, 16h02
  2. Réponses: 1
    Dernier message: 03/10/2008, 09h57
  3. Réponses: 2
    Dernier message: 17/12/2007, 01h21
  4. [PyQt] Mon appli se fige avec les sockets
    Par neeux dans le forum PyQt
    Réponses: 3
    Dernier message: 08/01/2006, 21h57
  5. gérer le clic gauche-droite en même temps de la sou
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2002, 22h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo