Convertissez un programme qui importe la bibliothèque cliente de Google en .exe avec pyinstaller

J'ai dû convertir un programme qui utilise Google Speech to Text en .exe, mais j'en étais accro, alors j'ai pris une note.

environnement

OS Windows10 (Chez pipenv) Python 3.7.4 pyinstaller 3.6

Commande exécutée

*** Convertissez test.py en .exe. En supposant ***

pyinstaller test.py --onefile

ERROR1 Tout d'abord, lorsque je l'exécute normalement, j'obtiens l'erreur suivante

pkg_resources.DistributionNotFound: The 'google-cloud-core' distribution was not found and is required by the application

Cette erreur peut être résolue en utilisant l'option --additional-hooks-dir au démarrage, en créant un fichier comme celui ci-dessous et en donnant le chemin d'accès au dossier. Je vois souvent des articles comme celui-ci, mais *** je n'ai pas pu le résoudre dans mon environnement. *** ***

hook-google.cloud.py


from PyInstaller.utils.hooks import copy_metadata
try:    datas = copy_metadata('google-cloud-core')
except: datas = copy_metadata('google-cloud-speech')

↓ j'obtiens cette erreur

    assert self.hook_module_name not in HOOKS_MODULE_NAMES
AssertionError

Ce problème était généralement résolu en réinstallant google-cloud-core. .. ..

pip install google-cloud-core

ERROR2 Après avoir installé google-cloud-core, il peut être exécuté et .exe est également généré, mais lorsque le .exe généré est exécuté, l'erreur suivante (ou exception?) Apparaît cette fois.

Exception ignored in: 'grpc._cython.cygrpc.ssl_roots_override_callback'
E0603 18:31:14.600000000 16632 src/core/lib/security/security_connector/ssl_utils.cc:482] assertion failed: pem_root_certs != nullptr

Cela semble concerner l'authentification des licences. Ici, si vous créez un dossier appelé hooks dans la même hiérarchie que test.py et que vous y créez et installez les fichiers suivants,

hook-grpc.py


from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files('grpc')

Si vous le reconstruisez avec la commande suivante, il n'apparaîtra pas

pyinstaller test.py --onefile --additional-hooks-dir=./hooks/

référence

https://github.com/pyinstaller/pyinstaller/issues/3935 https://teratail.com/questions/201443 https://teratail.com/questions/118297 https://qiita.com/akitooo/items/eb82a5f335d8ca9c9faf https://stackoverflow.com/questions/54634035/my-pyinstaller-is-giving-assertion-error-when-i-execute-it https://stackoverflow.com/questions/40076795/pyinstaller-file-fails-to-execute-script-distributionnotfound https://www.bountysource.com/issues/86848733-pyinstaller-3-6-assertionerror https://github.com/googleapis/google-cloud-python/issues/5774

Recommended Posts

Convertissez un programme qui importe la bibliothèque cliente de Google en .exe avec pyinstaller
Mémorandum PyInstaller Convertit Python [.py] en [.exe] avec 2 lignes
Comment obtenir le répertoire où se trouve le EXE construit avec Pyinstaller
EXE l'application créée avec PyQt5 avec PyInstaller
J'ai essayé d'utiliser la bibliothèque Python "pykakasi" qui peut convertir des kanji en romaji.
Je veux exécuter et distribuer un programme qui redimensionne les images Python3 + pyinstaller
Convertissez l'image au format .zip en PDF avec Python
Convertir 202003 en 2020-03 avec les pandas
Essayez de jouer avec l'uprobe qui prend directement en charge Systemtap
Paramètres pour entrer et déboguer le contenu de la bibliothèque avec VS Code
Convertir des images en sépia avec PIL (Python Imaging Library)
[Python Kivy] Comment créer un fichier exe avec pyinstaller
[Golang] Un programme qui détermine le tour avec des nombres aléatoires
L'histoire de la définition de la clé privée à 600 avec chmod
Comment démarrer la première projection
Lorsque j'exécute le fichier exe avec pyinstaller, mon PC se bloque.
Ecrire un programme qui abuse du programme et envoie 100 e-mails
Pour le moment, je veux convertir n'importe quel fichier avec ffmpeg !!
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
Convertir un script Python écrit dans PyTorch en exe avec PyInstaller
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche