web-dev-qa-db-fra.com

Comment compiler un script PyQt (.py) en un seul fichier exécutable autonome pour Windows (.exe) et/ou linux?

J'ai commencé à jouer avec PyQt et j'ai créé un "beau" script à partir de l'exemple d'application du livre blanc pyqt ( Pastebin ).

Cela fonctionne parfaitement sous Windows et Linux (avec l’environnement qt déjà installé sur les deux).

Maintenant, ma question est la suivante: comme je tente d’utiliser Qt parce qu’il est compilé (au moins du vieux pur Qt basé sur C++), comment puis-je compiler un fichier .exe pour l’exécuter sous Windows, ou un exécutable autonome pour Linux.

Le fait est que je veux que le programme soit compilé, pour des raisons de rapidité et de portabilité, au lieu d’être interprété à partir des sources, ce qui nécessiterait une installation préalable sur n’importe quelle machine. L'un des objectifs, par exemple, est d'envoyer de petits scripts d'interface graphique par courrier électronique à des collègues qui ne sont pas du tout programmeurs.

40
heltonbiker

si vous voulez créer complètement un exécutable autonome, vous pouvez essayer ceci: http://www.pyinstaller.org/ . Je pense qu'il est préférable de créer un seul exécutable que cx_freeze ou py2exe (d'après mon expérience). et facile à utiliser (documentation complète disponible sur le site).

Mise à jour: Les dernières informations de @SoursopTree et @LectureMaker sont désormais compatibles avec python version 3.3 - 3.6.

Mise à jour: transmettez l'argument --onefile si vous souhaitez créer un fichier .exe totalement autonome. par exemple :

pyinstaller.exe --onefile --windowed app.py

Mise à jour: Une autre bibliothèque intéressante dont l'auteur de la bibliothèque affirme que vous pouvez créer des applications de bureau multiplates-formes. ça vaut le coup d'essayer https://build-system.fman.io/

37
Yuda Prawira

Après avoir passé de nombreuses semaines sur ce sujet et essayé toutes les alternatives - PyInstaller, py2exe, cx_freeze, ... - J'ai créé ma propre bibliothèque: https://build-system.fman.io/ . Il est basé sur PyInstaller mais résout bon nombre de ses problèmes habituels. Il vous permet également de créer des programmes d’installation natifs sous Windows, Mac et Linux.

12
Michael Herrmann

Vous voudrez peut-être consulter cx_freeze . Il prétend créer des exécutables qui sont "multi-plateformes et devraient fonctionner sur toutes les plateformes sur lesquelles Python fonctionne".

Je l’ai découvert en explorant le paquet moneyGuru qui utilise PyQt. J'ai téléchargé le fichier moneyguru.exe sur mon système Windows XP, je l'ai exécuté et cela a fonctionné correctement sous Python 3.2.

Vous pouvez cloner le repo hg depuis ici pour voir comment c’est fait.

4
Don O'Donnell

J'utilise pyinstaller

pip install pyinstaller

Je ne sais pas, mais pyinstaller n'ajoute pas sip.pyd. Donc, vous avez besoin de PyQt5\sip.pyd . Je recommande Nice windows style qwindowvistastyle.dll .

Créez le fichier build.cmd en tant que:

pyinstaller --onefile --clean ^
    --add-binary="C:\Users\Quazer\.virtualenv\pyqt5-36\Lib\site-packages\PyQt5\sip.pyd;PyQt5" ^
    --add-binary="C:\Users\Quazer\.virtualenv\pyqt5-36\Lib\site-packages\PyQt5\Qt\plugins\styles\qwindowsvistastyle.dll;PyQt5\Qt\plugins\styles" ^
    .\main.py

^ - nouvelle ligne dans le fichier de commandes (.cmd, .bat)

0
Quazer

Il existe un module appelé Py2EXE, qui fera exactement ce que vous voulez faire. Il convertira le script en un fichier .exe à exécuter sur Windows. Je ne suis pas sûr de Linux, mais je parie qu’il existe un module quelque part . py2exe.com

0
Matt Habel

Depuis que j'essaie d'utiliser Qt parce qu'il est compilé

Vous éliminez cet avantage en utilisant Python. Bien que les autres réponses donnent une introduction aux options permettant de distribuer du code Python sans obliger les utilisateurs à installer Python eux-mêmes, Python est censé être un langage interprété, de sorte qu'il y aura des inconvénients à chacune de ces options (ex. Vitesse, taille du programme, compatibilité). etc...). Ils peuvent être ou ne pas être des pactes pour vous.

Vos deux autres options sont:

  1. Adoptez la nature interprétée de Python: demandez aux personnes avec lesquelles vous partagez votre programme d’installer Python et ses dépendances. Vous pouvez toutefois considérablement simplifier ce processus. Ex. sous Linux, utilisez un gestionnaire de paquets.
  2. Ecrivez votre programme en C++. Cela vous permettrait de véritablement compiler un seul exécutable natif. Malheureusement, cela signifie abandonner Python, mais il y a des raisons pour lesquelles les gens écrivent encore du code dans des langages moins beaux comme le C++ et il semble que vous pourriez en rencontrer certains.
0
Cameron Lee