Quel choix pour coder et déployer son programme Qt : en C++ ou Python
Avec génération d'un exécutable ou distribution des sources ?

Les rubriques (actu, forums, tutos) de Développez
Tags
Réseaux sociaux


 Discussion forum

Le , par Jiyuu, Rédacteur/Modérateur
Bonjour,

Après plusieurs mois sans programmation je reviens parmi vous avec notamment le projet de reprendre l'un de mes programmes depuis le début.

L'idée est surtout d'améliorer le programme coté « programmeur » (coté utilisateur il sera aussi étoffé, mais ceci n'est pas le but de cette discussion), le but étant de d’obtenir un code :
• plus simple ;
• plus lisible ;
• plus facilement maintenable ;
• plus facilement mettable à jour.

Afin d’obtenir le meilleur compromis, je me pose alors les deux questions suivantes :
• pour la partie codage, mieux vaut-il faire un code en « pureQt » (en C++) ou utiliser l’un de ses binding (principalement en Python) ?
• pour le déploiement, faut-il favoriser la création d’un exécutable ou diffuser le code source et les bibliothèques nécessaires ?

Ces questions ne sont pas forcément très simples de réponse car supposent que les deux langages soient connus à niveau équivalent. Malgré tout une approche peut être faite pour dégrossir le sujet.

N’hésitez pas apporter en plus de vos votes un argumentaire en séparant bien les deux questions, même si elles peuvent être étroitement liées, il est peut-être plus simple de déployer d’une certaine manière avec un certain choix de langage…

Au niveau du code, il faut aussi remarquer que Qt Creator, l'EDI développé spécialement pour Qt, ajoute le support de Python dans sa dernière préversion.

Merci pour votre contribution.

J


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de arnolddumas arnolddumas
http://www.developpez.com
Rédacteur/Modérateur
le 20/06/2013 13:52
Citation Envoyé par Jiyuu  Voir le message
Afin d’obtenir le meilleur compromis, je me pose alors les deux questions suivantes :
• pour la partie codage, mieux vaut-il faire un code en « pureQt » (en C++) ou utiliser l’un de ses binding (principalement en Python) ?

Je n'ai pas une grande expérience en Python donc mon avis sera forcément biaisé mais j'ai voté pour du code 100% C++. Je ne sais pas si l'application que tu développes est gourmande mais les performances seront bien meilleurs en C++ qu'en Python. Ca dépend aussi de ton expérience avec ces deux langages. Il y en a forcément un des deux que tu maitrises mieux que l'autre.

Citation Envoyé par Jiyuu  Voir le message
• pour le déploiement, faut-il favoriser la création d’un exécutable ou diffuser le code source et les bibliothèques nécessaires ?

Je dirais que ça dépend des sytèmes d'exploitation visés. Pour Windows et Mac, il faut impérativement faire un installeur. Pour Linux, BSD et autres, le mieux est de mettre les sources sur Github ou équivalent. Après, un simple git clone suivi d'un cmake ou d'un qmake et le logiciel tourne sur la machine.

Si le logiciel est un minimum intéressant, il se retrouvera packagé dans la plupart des distributions. Tu peux aussi maintenir toi-même les paquets.
Avatar de Apocalyps Apocalyps
http://www.developpez.com
Membre habitué
le 21/06/2013 14:37
Bonjour à tous, pour ce sondage, j'ai répondu :
Sans hésiter, un code 100 % en Qt ;

Tout simplement C++ (car Python n'est pas encore à mon ordre du jour ), l'interface de Qt Creator est amplement suffisante pour mes projets.

La création d'un exécutable sera plus propice à améliorer le "SAV" ;

ainsi que
La distribution des sources et des biblios sera d'une grande efficacité.

Ayant le projet de faciliter l'utilisation de mes logiciels pour les utilisateurs lambda, je me doit de créer un installeur Windows (minimum).
Les sources sont néanmoins disponible dans le cadre du logiciel libre et du portage Linux.
Avatar de dourouc05 dourouc05
http://www.developpez.com
Responsable Qt
le 21/06/2013 15:14
Citation Envoyé par arnolddumas  Voir le message
les performances seront bien meilleurs en C++ qu'en Python

Il faut encore voir si l'augmentation de perfs est si phénoménale que ça… et aussi si ça a la moindre importance dans le cas précis. Je ne pense pas que l'aspect performances brutes doit être le premier critère pour le choix. (D'ailleurs, Python n'a généralement pas à rougir de ses performances, bien que ce n'est pas son but principal.)
Avatar de jbb2811 jbb2811
http://www.developpez.com
Membre régulier
le 21/06/2013 16:06
Le problème de performance est relatif.
Certes dans l'absolu le C++ est plus performant que le python, mais:
1) suivant ce que fait ton application ça se verra pas forcement ( à moins que tu fasse du traitement d'image/video ... ), et de toute façon python ou C++ la lib Qt et donc l'IHM restera en natif
2) comme c'est plus rapide/facile de coder en python qu'en C++, il te reste plus de temps pour optimiser
Avatar de olreak olreak
http://www.developpez.com
Membre expérimenté
le 21/06/2013 17:53
Utiliser python nécessiterait que tes utilisateurs installent un interpréteur python. Et distribuer les sources plutôt qu'un exécutables nécessitent que tes utilisateurs installent la chaîne de compilation et fassent la compilation eux-mêmes.

Donc si tes utilisateurs ne sont pas très avertis, il vaut mieux développer en C++ et déployer un exécutable avec toutes les bibliothèques dynamiques nécessaires (dans un zip ou mieux via un installateur). Evidemment il faudra compiler pour diverses architectures si tu veux que ce soit multiplateformes.

S'il est plus facile ou plus pratique pour toi de développer en python, il y a peut être moyen de faire un installateur qui installera l'interpréteur python automatiquement?

Ça ne t'empêche pas de distribués les sources à part si tu veux faire de l'open source.
Avatar de grim7reaper grim7reaper
http://www.developpez.com
Membre chevronné
le 21/06/2013 18:23
Citation Envoyé par olreak  Voir le message
Utiliser python nécessiterait que tes utilisateurs installent un interpréteur python.

Pas nécessairement.
Il est possible de convertir un script en fichier .exe qui embarque son interpréteur et toutes les bibliothèques nécessaires avec lui.
cx_freeze est un outil qui permet ça (et qui a le bon goût d’être compatible Python 3)
Avatar de Jiyuu Jiyuu
http://www.developpez.com
Rédacteur/Modérateur
le 21/06/2013 20:06
Je tiens déjà à tous vous remercier pour vos votes et/ou commentaires.

Je souhaite réagir sur trois points :

La performance du langage :
À mon sens il existe au moins trois niveaux de performance pour un langage :
  • La performance liée à la rapidité d'écrire le code ;
  • La performance liée à la vitesse d'exécution, de consommation de ressources, ... ;
  • La performance liée à sa maintenabilité dans le sens large du terme (maj, correction bogues, ...) ;


Comme Dourouc et jbb2811 le suggère, je pense que la performance liée à la vitesse de calcul, etc est très relative. Je pense que vous aurez compris que je suis avant tout un codeur Python. J'avoue n'avoir jamais vraiment été gêné de ce coté. Les seules fois où j'ai eu l'impression de ralentissement était bien souvent au moment d'exécuter des requêtes Sql sur un serveur distant, et là je pense que les performances de Python ne sont pas forcément les seules en cause.

D'autre part, bien que je n'ai pas une très grande expérience en C++, j'ai lu ici et là que ce n'était pas la panacée en simplicité de codage, ma faible expérience me fait dire aussi ceci et jbb semble aussi suggérer. Python est, je pense, plus performant de ce coté.

La distribution du code :
Pour le C++, j'utilise depuis longtemps un logiciel écrit dans ce langage et dont les premières versions étaient exclusivement distribuées en version source. Même étant sous windows, je n'ai jamais rencontré de difficulté pour l'utiliser. Je pense que tout peut très bien se passer si c'est bien préparé.

Pour Python, je pense qu'il faut distinguer les applications destinées à tourner sur Win ou sur Linux comme l’indique arnolddumas.
Pour Linux, cela risque d'être beaucoup moins problématique puisque Python est présent de base (et C++ aussi au passage ^^), il ne reste plus qu'à gérer les bibliothèques manquantes.
Pour Win, j'avoue là être un peu plus dans le flou car tous les programmes que j'ai fait actuellement ont soit été exclusivement pour moi (donc j'ai déjà mon Python), soit distribué via un exécutable, et je confirme que cela peut très bien se passer.

Cependant, il existe des solutions dites portables de Python qui peuvent avantageusement être distribuées avec les sources du programme. Je me demande même dans quelle mesure, un simple copier-coller du dossier Python et quelques réglages ne permettraient pas de régler le problème (test en cours )

Quid de la taille du programme ?
Le problème peut venir de là.
En Python et pour des petits à moyens projets on va rapidement atteindre les 350 ou 400Mo… certes ça peut paraitre peu vu les 1 000Go bien souvent disponibles, mais bon...
J’ai aussi dernièrement essayé de créer un exécutable d’un programme exemple fourni avec Qt5.0.2. Si j’ai bien compris, une fois le .exe créé, il est nécessaire d’y ajouter quelques DLL. J’ai été assez surpris de la taille de Qt5Guid.DLL et d’autres… et me dit que finalement, un programme source python distribué avec tout ce qui faut pour le faire tourner n’a pas forcément à rougir.

En espérant que ces quelques remarques permettrons encore d’alimenter le débat, et peut-être de faire réagir des pro-Python

Merci à vous pour votre implication.
Avatar de arnolddumas arnolddumas
http://www.developpez.com
Rédacteur/Modérateur
le 21/06/2013 21:37
Citation Envoyé par Jiyuu  Voir le message
D'autre part, bien que je n'ai pas une très grande expérience en C++, j'ai lu ici et là que ce n'était pas la panacée en simplicité de codage, ma faible expérience me fait dire aussi ceci et jbb semble aussi suggérer. Python est, je pense, plus performant de ce coté.

C'est vrai que le C++ a vraiment des côté si0ux parfois.

Citation Envoyé par Jiyuu  Voir le message
Pour le C++, j'utilise depuis longtemps un logiciel écrit dans ce langage et dont les premières versions étaient exclusivement distribuées en version source. Même étant sous windows, je n'ai jamais rencontré de difficulté pour l'utiliser. Je pense que tout peut très bien se passer si c'est bien préparé.

D'un autre côté, tu es développeur. 99% des gens ignore ce qu'est un compileur ou même un langage de programmation donc il ne faudrait pas géneraliser. Tant mieux si tu arrives à compiler un logiciel mais je doute que ce soit le cas des utilisateurs finaux, sauf si le logiciel en question s'addresse aux développeurs.

Citation Envoyé par Jiyuu  Voir le message
Le problème peut venir de là.
En Python et pour des petits à moyens projets on va rapidement atteindre les 350 ou 400Mo… certes ça peut paraitre peu vu les 1 000Go bien souvent disponibles, mais bon...
J’ai aussi dernièrement essayé de créer un exécutable d’un programme exemple fourni avec Qt5.0.2. Si j’ai bien compris, une fois le .exe créé, il est nécessaire d’y ajouter quelques DLL. J’ai été assez surpris de la taille de Qt5Guid.DLL et d’autres… et me dit que finalement, un programme source python distribué avec tout ce qui faut pour le faire tourner n’a pas forcément à rougir.

Oui mais c'est Qt5Guid.dll aussi. N'oublies pas que c'est la version debug, avec plein de symboles inutiles (pour la distribution) dedans. Les version release sont nettement plus légères.

Pour que le programme prenne 300 Mo avec les dlls release, il faut utiliser quasiment tous les modules de Qt.
Avatar de Jiyuu Jiyuu
http://www.developpez.com
Rédacteur/Modérateur
le 21/06/2013 22:31
Citation Envoyé par arnolddumas  Voir le message
D'un autre côté, tu es développeur.

C'est gentil, mais je ne me considère que comme un développeur « plusquamateur »

Citation Envoyé par arnolddumas  Voir le message
99% des gens ignore ce qu'est un compileur ou même un langage de programmation donc il ne faudrait pas géneraliser. Tant mieux si tu arrives à compiler un logiciel mais je doute que ce soit le cas des utilisateurs finaux, sauf si le logiciel en question s'addresse aux développeurs.

Ta remarque a attiré plus que mon attention. Je me suis peut-être un peu emballé...
Huuuummm.... comment dire... il est possible que j'ai pris, dans ma mémoire défaillante (message pour Dourouc : c'était pas que de la Belge ), la version ReadyToUse (non setupée) pour une version source

Citation Envoyé par arnolddumas  Voir le message
Oui mais c'est Qt5Guid.dll aussi. N'oublies pas que c'est la version debug, avec plein de symboles inutiles (pour la distribution) dedans. Les version release sont nettement plus légères.


Alors là tu me rassures et tu démontres à merveille que j'ai des lacunes en C++

Citation Envoyé par arnolddumas  Voir le message
Pour que le programme prenne 300 Mo avec les dlls release, il faut utiliser quasiment tous les modules de Qt.

C'est exactement ça. De mémoire :
  • Python jsute après son installation : 50 à 60 Mo ;
  • Python après l'installation de PyQt : 250 à 300Mo.


J'ai mis la main sur une version portable de Python, pratique mais 250Mo, avec une possibilité de réduire car il y a toutes les bibliothèques.
Avatar de Jiyuu Jiyuu
http://www.developpez.com
Rédacteur/Modérateur
le 22/06/2013 0:37
Bon, dernière (ou pas) tentative de faire venir des Pythoniens
Manière simple de faire une version portable de Python, c'est de choisir une installation pour un utilisateur unique lors de l'installation de Python...

Allez les gars, faut faire tourner la balance dans l'autre sens
Offres d'emploi IT
Ingénieur développement open source (h/f)
CDI
CAREER BOOSTER - Ile de France - Paris (75000)
Parue le 06/10/2014
Technicien bureautique (H/F)
CDD
SCC SA - Aquitaine - Bordeaux (33000)
Parue le 08/10/2014
Ingénieur Banc de Test (H/F)
CDI
CTS - Bretagne - PLO/BRE
Parue le 21/10/2014

Voir plus d'offres Voir la carte des offres IT
 
 
 
 
Partenaires

PlanetHoster
Ikoula