J'essaye de créer mon application GUI en utilisant cx_Freeze
. Le setup.py
est le suivant:
running build running build_exe Traceback (most recent call last): File "setup.py", line 38, in <module> options=options, executables=exe) File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\dist.py", line 349, in setup distutils.core.setup(**attrs) File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\distutils\core.py", line 148, in setup dist.run_commands() File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\distutils\dist.py", line 955, in run_commands self.run_command(cmd) File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\distutils\dist.py", line 974, in run_command cmd_obj.run() File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\distutils\command\build.py", line 135, in run self.run_command(cmd_name) File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\distutils\cmd.py", line 313, in run_command self.distribution.run_command(command) File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\distutils\dist.py", line 974, in run_command cmd_obj.run() File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\dist.py", line 219, in run freezer.Freeze() File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\freezer.py", line 616, in Freeze self.finder = self._GetModuleFinder() File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\freezer.py", line 342, in _GetModuleFinder finder.IncludePackage(name) File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\finder.py", line 659, in IncludePackage module = self._ImportModule(name, deferredImports) File "C:\Users\dm\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\finder.py", line 351, in _ImportModule raise ImportError("No module named %r" % name) ImportError: No module named 'PyQt5.Qt'
Lors de la construction, le cx_Freeze passe par l'erreur suivante. J'ai installé PyQt5.
from cx_Freeze import setup, Executable import os import sys base = None if sys.platform == 'win32': base = 'Win32GUI' exe = [Executable("main.py", base=base, icon='window_icon_XbH_icon.ico')] os.environ['TCL_LIBRARY'] = r'C:\\Users\\dm\\AppData\\Local\\Programs\\Python\\Python36\\tcl\\tcl8.6' os.environ['TK_LIBRARY'] = r'C:\\Users\\dm\\AppData\\Local\\Programs\\Python\\Python36\\tcl\\tk8.6' options = { 'build_exe': { 'includes': ['scipy.io', 'scipy.spatial.ckdtree'], 'include_files': [r'C:\\Users\\dm\\AppData\\Local\\Programs\\Python\\Python36\\DLLs\\tcl86t.dll', r'C:\\Users\\dm\\AppData\\Local\\Programs\\Python\\Python36\\DLLs\\tk86t.dll', r'C:\\Users\\dm\\AppData\\Local\\Programs\\Python\\Python36\\Lib\\site-packages\\pyqt5_tools\\platforms\\qwindows.dll', 'window_icon_XbH_icon.ico'], 'packages': ['pkg_resources._vendor', 'pandas', 'numpy', 'scipy', 'pydub', 'PyQt5', 'soundfile', 'sounddevice', 'cffi'], } } setup(name="app", version="1.0", description='To be added', options=options, executables=exe)
Quelqu'un pourrait-il m'aider à comprendre ce qui ne va pas?
3 Réponses :
Essayez de supprimer la ligne (inutile?)
import PyQt5.Qt
de votre script setup.py
.
EDIT après que l'OP a supprimé ce ligne:
Essayez de supprimer les instructions os.environ
inutiles, ce sont pour tkinter
, peut-être qu'elles sont en conflit. Supprimez les 3 entrées DLL dans les include_files
(ne gardez que l'icône). Ajoutez 'atexit'
à la liste includes
, voir Exemple cx_Freeze PyQt5 .
Essayez de réinstaller PyQt5
et cx_Freeze
, voir les mises en garde potentielles dans ImportError: Aucun module nommé PytQt5 et Module PyQt5 et QtGui introuvable .
Si cela ne fonctionne toujours pas, il y a peut-être un conflit avec un autre package utilisé dans votre application. Pour le savoir, créez un exemple minimal en utilisant uniquement PyQt5
, tel que cx_Freeze PyQt5 exemple et essayez de le figer. Si cela fonctionne, ajoutez les autres packages un par un, en vérifiant l'application figée à chaque étape.
MODIFIER II:
PyQt4
s'il est ou a été installé sur votre système. Assurez-vous de supprimer toute importation de PyQt4
de votre application et peut-être ajouter une entrée exclut: ['PyQt4']
au dictionnaire build_exe
dans votre Script setup.py
. Mais je suppose que vous obtenez alors un message d'erreur différent.
Je ne sais pas pourquoi cx_Freeze ne parvient pas à localiser PyQt5.
Que se passe-t-il si vous tapez import PyQt5.Qt dans une console Python?
@ M.Denis J'ai ajouté d'autres propositions à ma réponse.
La suppression de PyQt5 de la liste des packages supprime le message d'erreur. Mais j'obtiens l'erreur d'attribut suivante lors de l'exécution de l'application. L'erreur est AttributeError: function 'LLVMPY_OffsetOfElement not found
.
Qu'est-ce que le retraçage complet? Quelle DLL doit fournir la fonction qui n'est pas trouvée? Essayez d'ajouter cette DLL à votre répertoire de distribution ou à son sous-répertoire lib
. Votre interface graphique est-elle basée sur PyQt5
ou sur une autre bibliothèque graphique? Si oui, avez-vous essayé d'ajouter import PyQt5
à votre script d'application principal?
J'essaie toujours de comprendre cela. Mais je suis sûr qu'il s'agit d'un conflit de version. J'ai pu geler l'application la semaine dernière et maintenant je ne peux plus car j'ai réinstallé mon système d'exploitation.
Intéressant. Peut-être que votre nouveau système d'exploitation fournit des versions incompatibles de (certaines des) DLL Qt et que l'application gelée recherche ces DLL au mauvais endroit, ne les trouve pas, utilise la variable d'environnement PATH et trouve la mauvaise. Une fois que vous avez gelé votre application, essayez de faire des copies des DLL Qt qui devraient se trouver dans un sous-répertoire du répertoire de construction dans le répertoire de construction lui-même et dans son sous-répertoire lib
.
Je sais que c'est une vieille question, mais aujourd'hui, j'ai rencontré ce problème.
Voici comment je l'ai résolu:
J'ai supprimé PyQt5 et tout ce qui y était lié de mon setup.py
('{"build_exe": {"packages":' <- cette partie).
Après avoir compilé mon exe.
Si vous exécutez l'exe et qu'il y a une erreur de module PyQt5 manquante, alors à partir de votre répertoire site-packages
(chemin similaire à celui-ci: d: \ Python37 \ Lib \ site-packages \ PyQt5 \)
copiez tout le répertoire PyQt5 dans le répertoire de la bibliothèque compilée cx_freeze (exemple: .. \ build \ exe.win-amd64-3.7 \ lib \)
Maintenant, essayez d'exécuter l'exe et il ne devrait y avoir aucune erreur de module manquante, au moins liée à PyQt5. Si vous avez un autre problème de module manquant, copiez-le simplement de vos packages de site dans le répertoire lib. J'espère que cela aide.
Ne mettez pas PyQt5 en majuscule. Essayez pyqt5 dans le fichier setup.py.
Quelle version de cx_Freeze utilisez-vous?
@jpeg Le dernier. cx_Freeze 5.1.1