[PYTHON] À propos des erreurs lors de l'installation et de l'exécution de PyInstaller

Qu'est-ce que PyInstaller

PyInstaller est un excellent outil qui peut convertir votre script Python (.py) en un fichier exécutable (.exe). En tant qu'exemple pratique que j'ai réellement vécu, "** Je souhaite utiliser un outil d'analyse automatique créé en Python dans une destination de recherche commune (sans environnement Python) **" C'était un excellent outil pour satisfaire le désir de s'amuser. Dans cet article, je souhaite utiliser PyInstaller, mais je lance une erreur, et le but est d'envoyer un vaisseau d'aide à ceux qui sont perdus sur la route. Pour savoir comment utiliser PyInstaller, veuillez consulter les articles suivants auxquels j'ai fait référence.

Ici, je vais vous expliquer comment éviter chacune des trois erreurs dans lesquelles j'étais vraiment. Le but n'est pas de clarifier la cause de l'erreur, mais de générer un fichier exe en utilisant ** PyInstaller **, nous ne considérerons donc pas la cause de l'erreur en profondeur. Si vous voulez en savoir plus, merci de gg en anglais.

Trois erreurs addictives

  1. PyInstaller ne peut pas être installé en premier lieu
  2. La fonction exec ne fonctionne pas lors de l'exécution du fichier exe (ModuleNotFoundError: No mudule named'pkg_resources.py2_warm '. [8352] Impossible d'exécuter le script pyi_rth_pkgres)
  3. Je ne sais pas (`qt.qpa.plugin: Impossible de trouver le plugin de la plate-forme Qt" windows "dans" ". Cette application n'a pas pu démarrer car aucun plugin de la plate-forme Qt n'a pu être initialisé. La réinstallation de l'application peut résoudre ce problème. )

environnement

Windows 10 Anaconda3 4.8.2 Python 3.6.5 PyInstaller 3.6

1. Problème "PyInstaller ne peut pas être installé en premier lieu"

C'était très difficile. En conclusion, ** n'a pas résolu **. Peu de gens sont accros à cette erreur et l'ont résolue. C'est un marais auquel il est assez difficile de s'échapper.

Commande à installer

pip install pyinstaller
(Ceci est recommandé, mais j'ai utilisé conda install pyinstaller lorsque je l'ai finalement installé, veuillez essayer lequel est le meilleur, si vous créez un environnement avec anaconda , Ce dernier est recommandé)

Quel genre d'erreur s'est produit?

Je n'ai pas noté les détails de l'erreur pour le moment, mais je me souviens à peu près que ** "setuptools" s'est assez mal comporté ** (comme satisfait à l'exigence setuptools). Contenu)

Percée

Enfin, l'installation est maintenant en cours. Eh bien, comment as-tu fait?

--1er essai: mise à jour anaconda On en parle aussi profondément dans GitHub (quand vous le cherchez, il sort), parmi lesquels, pour éviter cette erreur, `conda J'ai été témoin d'un message disant que la mise à jour est valide, je l'ai mise à jour, mais cela n'a pas fonctionné (même lors de l'utilisation de la mise à jour, les outils de configuration déjà inclus sont profondément connectés à anaconda, alors déconnectez les outils de configuration et effectuez la mise à jour, etc. Impossible)

(Parlant en détail, j'avais renoncé à installer PyInstaller pour le moment. Je n'ai pas pu éviter l'erreur et je n'ai pas pu continuer mon travail. Je répondais sur place avec un fichier batch. , J'avais besoin de mettre à jour seaborn dans un endroit qui n'a rien à voir avec ça. Cependant, je ne peux pas le mettre à jour. L'environnement est trop sale. Sale signifie ** pip et conda sont mélangés **. L'environnement s'est effondré. Donc, j'ai essayé de reconstruire l'environnement uniquement avec conda (le docker semble être gênant s'il s'agit de Windows, donc je l'ai arrêté) et j'ai lancé un nouvel environnement virtuel conda create --name makeexe python == 3.6. A ce stade, pip install pyinstaller n'a pas réussi. Peut-être que ** pyinstaller ne peut pas être installé avec pip dans l'environnement Anaconda **. J'ai installé les packages minimum requis (conda install numpy pandas seaborn matplotlib tqdm opencv oreiller). Après cela, j'ai soudainement pensé à installer pyinstaller via conda conda install pyinstaller, et cela est arrivé rapidement. Appel, cousin. )

Quel était le problème après tout?

Je ne connais pas les détails, mais je pense que c'était une erreur ** d'entrer dans l'environnement Anaconda via pip en premier lieu. En conséquence, la théorie. Ne mélangez pas pip dans l'environnement conda, cela signifie interdire la destruction de l'environnement. J'en étais parfaitement conscient. Dans la mesure du possible, assurez-vous que la bibliothèque que vous souhaitez installer est disponible dans conda. Si vous le pouvez, faisons-le là-bas. C'est plus sûr.

2. Problème "La fonction exec ne fonctionne pas lors de l'exécution du fichier exe"

Commande d'exécution PyInstaller

Tout d'abord, l'installation de PyInstaller a réussi et j'ai pu l'exécuter. Après vous être déplacé vers le répertoire où vous souhaitez appliquer PyInstaller (pour en faire un fichier exe), exécutez la commande suivante pour en faire un fichier exe (avec --onefile, combinez les modules en un seul fichier exe; le fichier de sortie est un fichier exe. Seulement).

$ cd ~~~ # main.Déplacer vers le répertoire où se trouve py
$ pyinstaller main.py --onefile

La structure du répertoire à ce moment est la suivante. En exécutant Pyinstaller, deux nouveaux répertoires, build et dist, sont créés, et dist / main.exe et le fichier exécutable sont générés. En double-cliquant dessus, le programme de main.py sera exécuté. Eh bien, je lance une erreur. Haha

./
|
|- main.py (Programme créé)
|- config.json (main.Fichier de configuration lu par py)
|- main.spec (créé avec pyinstaller)
|- main.exe (créé dans le répertoire dist avec pyinstaller, installé dans le même répertoire que config pour la commodité du code)
|- dist/
|    |- main.exe
|
|- build/
     |- main/
          |- ~~~

Quel genre d'erreur avez-vous obtenu?

Lorsque j'ai exécuté le fichier main.exe généré, j'ai eu l'erreur suivante.

Traceback (most recent call last):
  File "site-packages\PyInstaller\loader\rthooks\pyi_rth_pkgres.py", line 13, in <module>
  File "C:\ProgramData\Anaconda3\envs\(venv you made)\lib\site-packages\PyInstaller\loader\pyimod03_iimporters,py", line 623, in exec_module
    exec(bytecode, module.__dict__)
  File "site-packages\pkg_resources\__init__.py", line 86, in <module>
ModuleNotFoundError: No mudule named 'pkg_resources.py2_warm'
[8352] Failed to execute script pyi_rth_pkgres

ʻExec ne peut pas être exécuté, il hurle que le pkg_resources.py2_warm` requis pour s'exécuter est manquant.

Solution

Reportez-vous à here et ajoutez le module appelé ModuleNotFoundError à hiddenimports dans le fichier main.spec généré lorsque PyInstaller est exécuté. Ajouter.

-              hiddenimports=[],
+              hiddenimports=['pkg_resources.py2_warn'],

Ensuite, ** utilisez ce fichier de spécification ** et créez à nouveau un fichier exe avec PyInstaller (pour le moment, il est acceptable de jeter les fichiers autres que le fichier de spécification, alors jetons-le. , Cela cause des problèmes tels que des erreurs et comment écraser). Exécutez-le avec la commande suivante. pyinstaller main.spec --onefile
Cela arrêtera de générer des erreurs sur le module exec.

3. Problème "Je ne sais pas, mais je vomis"

En utilisant le fichier main.spec plus tôt, j'ai pu éviter l'erreur liée au module exec. Mais quand je l'exécutais, il y avait encore une erreur. Voyons de quel genre d'erreur il s'agissait. Au fait, j'appelle cela «je ne comprends pas l'erreur» parce que je n'ai pas assez de vocabulaire. Eh bien, c'est facile à comprendre.

Quel genre d'erreur avez-vous obtenu?

C:\ProgramData\Anaconda3\envs\(venv you made)\lib\site-packages\PyInstaller\loader\pyimod03_iimporters,py:623:MatplotlibDeprecationWarning:
THEMATPLOTLIBDATA environment variable was deprecated in Matplotlib 3.1 and will be removed in 3.3.
  exec(bytecode, module.__dict__)
2020/03/27 10:29:55 - complete to load config.json (De là, sortie intentionnelle dans le programme)
~(Omission)~
2020/03/27 10:30:14 - success affine transforming.
qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Le premier message est également de exec, défini sur hiddenimport et traité, alors allez-y. Ce qui suit est pour annoncer la progression du programme, donc ça va (un message qui est intentionnellement craché dans le programme). Une nouvelle erreur liée à qt.qpa.plugin s'est produite au moment de la conversion Affine. Je me demande si la plate-forme ne peut pas être installée. Je ne suis pas sûr de ce qui se passe.

Solution

Question posée à stackoverflow Cependant, si vous en extrayez une partie,

There seem to be two solutions, the first one worked fine for me:

  • copy platform directory to directory of your executable. You'll find the platform directory at a location like c:\Users\<username>\envs\<environmentname>\Library\plugins\platforms or
  • Upgrade to a newer version of pyqt: conda install -c anaconda pyqt

Use the second option with care: Do not try to use pip for pyqt installation if you have a conda environment, this might break your conda installation: https://github.com/ContinuumIO/anaconda-issues/issues/1970

Quand,

I had an issue where my python code worked fine, but the compiled .exe file would provide the "could not find or load the Qt platform plugin windows" problem. I fixed the problem by copying the ~PyQt5\Qt\plugins\platforms folder from the program's directory, generated by using pyinstaller --onedir main.py, to the folder holding the .exe file.

It seems that in my case the only way "helping" my program detect the required .dlls was having the platforms folder next to the main.exe. Pasting the platforms folder to the program's directory after using pyinstaller --onefile main.py also makes the program work.

est. Comme prévu, il s'agit d'un débordement de pile. La réponse à ce que vous voulez résoudre est déjà disponible. Génial. Tout d'abord, j'ai installé pyqt comme quelque chose que je pourrais essayer à un prix raisonnable. La commande est conda install -c anaconda pyqt

Cependant, cela ne s'est pas amélioré. Quel est le débordement de pile. C'est comme ça? Cela ne me donne pas une chance de me faufiler, l'idée suivante a déjà été dessinée, oh, je ne peux pas battre le débordement de pile.

J'ai donc fait une copie du répertoire de la plate-forme, ce qui est recommandé comme autre méthode. La plate-forme est située dans "C: \ ProgramData \ Anaconda3 \ envs \ (venv vous avez fait) \ Library \ plugins \ plates-formes" (dans mon cas, cela peut être différent pour chaque personne, mais c'était aussi un chemin différent dans la réponse dans stackoverflow) .. Copiez ce répertoire platform dans le même répertoire que le fichier exe que vous souhaitez exécuter. En d'autres termes, la structure finale du dossier sera comme ceci ⇓

./
|
|- main.py (Programme créé)
|- config.json (main.Fichier de configuration lu par py)
|- main.spec (créé avec pyinstaller, inports cachés'pkg_resources.py2_warn'Ajoutée)
|- main.exe (créé dans le répertoire dist avec pyinstaller, installé dans le même répertoire que config pour la commodité du code)
|- platforms/(Copiez et collez ici)
|   |
|   |- qdirect2d.dll
|   |- qminimal.dll
|   |- qoffscreen.dll
|   |- qwebgl.dll
|   |- qwindows.dll
|- dist/
|    |- main.exe
|
|- build/
     |- main/
          |- ~~~

Si vous exécutez le fichier exe dans cet état (il ne devrait pas être nécessaire de le reconstruire), le fichier exe sera exécuté normalement jusqu'à la fin! !! !! !! Si le fichier exe génère une erreur, essayez de reconstruire à nouveau.

À la fin

Je veux utiliser PyInstaller, mais j'obtiens une erreur. Je pense que j'obtiens diverses erreurs. Aucun article ne résume ces erreurs. Je n'ai pas bien compris et j'ai été balancé. Donc, après tout, la solution fondamentale était d'utiliser conda install. Je ne suis pas sûr. Mais PyInstaller est utile. Parce qu'il y a des PC (et des cerveaux) qui ne peuvent pas installer les langages de programmation ainsi que Python parce qu'ils sont séparés du net dans le monde. Cependant, l'inconvénient est que ** le fichier exe généré est très lourd **. Au moins, contrairement aux scripts, vous ne pouvez pas facilement l'envoyer par courrier électronique. Je pense qu'il y a encore diverses erreurs. Veuillez utiliser cet article. Si vous écrivez dans les commentaires, nous ajouterons également une solution de contournement pour cette erreur à cet article. Je veux créer ensemble un manuel de contre-mesures d'erreur PyInstaller.

Merci pour la lecture. Au revoir

Recommended Posts

À propos des erreurs lors de l'installation et de l'exécution de PyInstaller
À propos des erreurs lors de l'installation et de l'exécution de PyInstaller
À propos de _ et __
[PyTorch] Comment installer
[Python] Chapitre 01-02 À propos de Python (Exécution et installation de l'environnement de développement)
[Python] Chapitre 01-02 À propos de Python (Exécution et installation de l'environnement de développement)
Résumé et erreurs courantes sur cron
PySpark 1.5.2 + Elasticsearch 2.1.0 Procédure d'installation et exécution
À propos de _ et __
Traitement de pip et des erreurs d'installation associées sur Ubuntu 18.04
À propos de la classe et de l'instance
exécution et erreur de pytube
À propos de cumprod et cummax
[Python] Mémo sur les erreurs
À propos de la validation croisée et de la valeur F
Je voulais m'inquiéter du temps d'exécution et de l'utilisation de la mémoire