pyinstaller单个程序的exe,它使用谷歌api客户端lib。

问题描述 投票:0回答:2

我有一个python程序,我已经成功地打包为一个单一的exe使用pyinstaller在过去。最近,我添加了新的功能,这使得使用的谷歌api的python客户端( https:/developers.google.comapi-client-librarypython。 ). 我试图制作一个新版本的单exe包,却无法运行。

我启用了调试和控制台,最初的问题是它没有接收到oauth lib。我通过在我的规范文件中添加以下内容来解决这个问题。

hiddenimports=['googleapiclient', 'apiclient']

当我构建时,我可以看到这个

53092 INFO: Hidden import 'googleapiclient' has been found otherwise
53093 INFO: Hidden import 'apiclient' has been found otherwise

然而,现在当我运行重建的exe时,我在退出前得到以下错误:

pkg_resources.DistributionNotFound: google-api-python-client

我看不到任何关于这个的参考信息 我也不知道如何强制将它与exe打包在一起。

我想我不可能是唯一一个曾经想打包一个利用google api的python程序的人,但是我在和我的朋友google的很多时间里都没有找到任何帮助......

有什么技巧吗?

python-2.7 pyinstaller google-api-python-client
2个回答
1
投票

当我从使用pip转为使用easy_install安装google-api-python-client包后,我能够更深入地研究这个问题。手动安装蛋文件给我提供了一个更整洁的测试方式。

然后,我开始使用pyinstaller,在不使用--onefile选项的情况下进行构建,这样我就可以开始对我的程序打包的蛋文件进行处理。最后我发现,我的问题是源于我在使用Pandas和Google API的事实。

这里是github上相关的Pandas bug。

为了解决这个问题,我不得不更新我的Pandas版本。

我确实发现,如果我移到Pandas的最新版本(1.6.0),我遇到了一个新的问题,因为它导入了dateutil,它导致寻找zoneinfo文件的问题。我已经用上了Pandas 1.5.1,一切正常。


1
投票

很多人都有同样的问题,但我找不到任何答案。

试试这边

  1. 找到您的项目的站点包
  2. 进入Pyinstallerhooks,找到hokk-google.api_core.py。
  3. 添加行(编辑行) datas += copy_metadata('google-api-python-client')

例子

from PyInstaller.utils.hooks import copy_metadata datas = copy_metadata('google-api-core') datas += copy_metadata('google-api-python-client')

  1. excute pyinstaller hidden-import google-api-python-client

pyinstaller --hidden-import google-api-python-client(客户端)

  1. 你可以避免errorpkg_resources.DistributionNotFound: google-api-python-client。
© www.soinside.com 2019 - 2024. All rights reserved.