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.
ModuleNotFoundError: No mudule named'pkg_resources.py2_warm '. [8352] Impossible d'exécuter le script pyi_rth_pkgres
)Windows 10 Anaconda3 4.8.2 Python 3.6.5 PyInstaller 3.6
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.
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é)
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)
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)
conda install py installer
au moment où je l'ai lancé.(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. )
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.
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/
|- ~~~
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.
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.
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.
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.
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.
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