2
votes

La distribution 'google-cloud-firestore' n'est pas ajoutée à la version PyInstaller

Lorsque j'essaie de créer un exécutable pour mon script python, cela me donne:

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

J'ai créé les hooks suivants: 'hook-google-cloud-firestore.py' et 'hook-google.cloud.py', mais cela ne semble pas non plus aider. Des idées pour résoudre ce problème?


1 commentaires

Voir le même problème lorsqu'il est installé par Home Assistant en interne.


3 Réponses :


8
votes

pendant deux jours, j'ai trouvé la solution en trois étapes

FIRST

dans hook-google.cloud ajoutez ce code.

pyinstaller.exe --onefile --clean yourmainfile.py

racine de hook-google.cloud.py ..

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

SECOND

créer

C:\Users\ASPIREone\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\grpc\_cython\_credentials\roots.pm

à la racine de:

XXX

et ajoutez ce code

Exception ignored in: 'grpc._cython.cygrpc.ssl_roots_override_callback'
E0527 07:10:01.571000000  3672 src/core/lib/security/security_connector/ssl_util
s.cc:449] assertion failed: pem_root_certs != nullptr

n'oubliez pas de supprimer le dossier __pycache__ dans votre projet principal my main le projet est la racine de C:\Users\ASPIREone\PycharmProjects\amazon\parking-go

troisième

supprimer votre application (exemple: main.exe) à la racine de:

C:\Users\ASPIREone\AppData\Local\Programs\Python\Python37-32\Scripts\dist

aller à la ligne de commande

ne pas utiliser pyinstaller.exe --onefile main.py mais utilisez

pyinstaller.exe --onefile --clean main.py

car m proect principal dans le dossier racine donc j'écris en ligne de commande:

pyinstaller.exe --onefile --clean C: \ Users \ ASPIREone \ PycharmProjects \ amazon \ parking-go \ main.py

vous devez nettoyez-le et reconstruisez-le d'abord

cela devrait fonctionner!

.........

si vous rencontrez une erreur lors de l'exécution de votre application lorsque récupérer des données ou écrire dans Firestore comme ceci:

from PyInstaller.utils.hooks import copy_metadata, get_package_dir
datas += copy_metadata('google-cloud-firestore')
datas += copy_metadata('google_cloud_firestore')  #altlll

hiddenimports += ['google-cloud-firestore_v1']
#pythonhosted.org/pyinstaller/hooks.html#understanding-pyinstaller-hooks
#get_package_dir returns tuple (where pkg stored, abs path to pkg)
pkg_dir = 'C:/Users/ASPIREone/AppData/Local/Programs/Python/Python37-32/Lib/site-packages/google/cloud/firestore_v1'

datas += (pkg_dir, 'google-cloud-firestore')

cela a été résolu avec cette étape:

copier le fichier roots.pm dans votre projet principal ou où vous exécutez votre application

dir de roots.pm est p >

C:\Users\ASPIREone\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\PyInstaller\hooks

créer hook-grpc.py et mettre ce code

hook-google-cloud-firestore.py

aller en ligne de commande p >

C:\Users\ASPIREone\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\PyInstaller\hooks

ça devrait marcher!


0 commentaires

0
votes

Récemment, j'ai trouvé une solution à ce problème, j'espère que cela résoudra également votre problème.

Créez deux fichiers hook:

  1. hook-google.cloud.firestore.py
  2. hook-grpc.py

Dans hook-google.cloud.firestore.py , écrivez le code ci-dessous et enregistrez-le quelque part:

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

Dans hook-grpc.py écrivez le code ci-dessous et enregistrez-le au même endroit:

from PyInstaller.utils.hooks import copy_metadata
datas = copy_metadata('google-cloud-firestore')

Maintenant, copiez-collez les deux fichiers dans:

C: \ Users \ Paul \ AppData \ Local \ Programs \ Python \ Python38 \ Lib \ site-packages \ PyInstaller \ hooks

Si vous rencontrez toujours le problème, veuillez utiliser setuptools version 45.0.0 puis exécutez pyinstaller et créez votre fichier exe par:

pyinstaller --clean --onefile yourfilename.py


0 commentaires

0
votes

Si vous ne parvenez pas à localiser hooks-google.cloud.py dans le package PyInstaller, vous pouvez essayer de le localiser dans:

C:\Users\<USER>\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\_pyinstaller_hooks_contrib\hooks\stdhooks

ou si vous utilisez un environnement virtuel, vous pouvez rechercher _pyinstaller_hooks_contrib \ hooks à la place si vous l'utilisez pour créer le fichier exe.

Si l'erreur persiste, vous pouvez prendre un regardez le journal de construction pour localiser où hook-google.cloud.py est construit.

J'espère que cela aidera quelqu'un à l'avenir car cela fonctionne pour moi. p>


0 commentaires