我有一个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的很多时间里都没有找到任何帮助......
有什么技巧吗?
当我从使用pip转为使用easy_install安装google-api-python-client包后,我能够更深入地研究这个问题。手动安装蛋文件给我提供了一个更整洁的测试方式。
然后,我开始使用pyinstaller,在不使用--onefile选项的情况下进行构建,这样我就可以开始对我的程序打包的蛋文件进行处理。最后我发现,我的问题是源于我在使用Pandas和Google API的事实。
为了解决这个问题,我不得不更新我的Pandas版本。
我确实发现,如果我移到Pandas的最新版本(1.6.0),我遇到了一个新的问题,因为它导入了dateutil,它导致寻找zoneinfo文件的问题。我已经用上了Pandas 1.5.1,一切正常。
很多人都有同样的问题,但我找不到任何答案。
试试这边
例子
from PyInstaller.utils.hooks import copy_metadata
datas = copy_metadata('google-api-core')
datas += copy_metadata('google-api-python-client')
pyinstaller --hidden-import google-api-python-client(客户端)