'google-cloud-firestore'发行版未添加到PyInstaller构建中

时间:2019-04-25 12:03:21

标签: python firebase pyinstaller

当我尝试为我的python脚本构建可执行文件时,它会给我:

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

我创建了以下钩子:“ hook-google-cloud-firestore.py”和“ hook-google.cloud.py”,但这似乎也无济于事。有任何解决办法的想法吗?

3 个答案:

答案 0 :(得分:0)

两天后,我通过三个步骤找到了解决方案

第一

hook-google.cloud中添加此代码。

datas += copy_metadata('google-cloud-firestore')

hook-google.cloud.py的根 ..

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

第二

制作

hook-google-cloud-firestore.py

在以下位置:

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

并添加此代码

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')

别忘了在主项目中删除文件夹__pycache__,我的主项目是C:\Users\ASPIREone\PycharmProjects\amazon\parking-go的根目录

第三

在以下目录的根目录中删除您的应用程序(例如:main.exe)

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

转到命令行

不要使用pyinstaller.exe --onefile main.py,而要使用

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

因为在根文件夹中有m个主要项目,所以我在命令行中编写:

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

您必须先清理并重新构建

应该可以!

.........

如果在运行应用程序时检索数据或写入Firestore时出错,如下所示:

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

此步骤已解决:

将文件roots.pm复制到您的主项目where you run your app

roots.pm

dir是

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

制作hook-grpc.py并输入以下代码

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

转到命令行

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

应该可以!

答案 1 :(得分:0)

最近我为此找到了解决方案,希望这也可以解决您的问题。

创建两个挂钩文件:

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

hook-google.cloud.firestore.py 中编写以下代码并将其保存在某处:

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

hook-grpc.py 中编写以下代码,并将其保存在同一位置:

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

现在复制将两个文件都粘贴到:

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

如果仍然遇到问题,请使用setuptools版本45.0.0,然后运行pyinstaller并通过以下方式创建exe文件:

pyinstaller --clean --onefile yourfilename.py

答案 2 :(得分:0)

如果无法在PyInstaller软件包中找到hooks-google.cloud.py,则可以尝试在以下位置找到它:

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

或者如果您使用的是虚拟环境,则可以使用_pyinstaller_hooks_contrib\hooks来查找exe文件。

如果错误仍然存​​在,则可以查看构建日志以查找hook-google.cloud.py的构建位置。

我希望这对将来对我有用的人有所帮助。