Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
';谷歌api python客户端';找不到分发版本,该分发版本是pyinstaller应用程序所必需的_Python_Pyinstaller_Google Api Python Client_Fbs_Freeze - Fatal编程技术网

';谷歌api python客户端';找不到分发版本,该分发版本是pyinstaller应用程序所必需的

';谷歌api python客户端';找不到分发版本,该分发版本是pyinstaller应用程序所必需的,python,pyinstaller,google-api-python-client,fbs,freeze,Python,Pyinstaller,Google Api Python Client,Fbs,Freeze,我目前正在尝试使用pyinstaller构建一个应用程序。我得到了一个错误,没有找到“google api python client”发行版,这是应用程序所必需的,我完全不知道为什么 运行pip显示google api python客户端结果 Name: google-api-python-client Version: 1.8.2 Summary: Google API Client Library for Python Home-page: http://github.com/google

我目前正在尝试使用pyinstaller构建一个应用程序。我得到了一个错误,
没有找到“google api python client”发行版,这是应用程序所必需的,我完全不知道为什么

运行
pip显示google api python客户端
结果

Name: google-api-python-client
Version: 1.8.2
Summary: Google API Client Library for Python
Home-page: http://github.com/google/google-api-python-client/
Author: Google LLC
Author-email: googleapis-packages@google.com
License: Apache 2.0
Location: c:\dev\software\schoology_scrape\schoology_scrape_venv\lib\site-packages
Requires: google-auth-httplib2, uritemplate, google-auth, google-api-core, httplib2, six
Required-by:
我还有一个requirements.txt文件,其中包含项目中使用的所有库


任何帮助都将不胜感激

实际上是在windows上遇到了这个问题,而macOS是可以的。我在和你一起建房子

问题
google-api-python-client
不是一个python模块,而是一个资源,这意味着您不能将其作为隐藏导入注入
GoogleAppClient.model
GoogleAPI python客户端
文件夹中的分发信息作为打包资源读取

您的全部错误可能更接近于此:

...
File "c:\python36\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
    exec(bytecode, module.__dict__)
  File "site-packages\googleapiclient\http.py", line 67, in <module>
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "c:\python36\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
    exec(bytecode, module.__dict__)
  File "site-packages\googleapiclient\model.py", line 36, in <module>
  File "site-packages\pkg_resources\__init__.py", line 479, in get_distribution
  File "site-packages\pkg_resources\__init__.py", line 355, in get_provider
  File "site-packages\pkg_resources\__init__.py", line 898, in require
  File "site-packages\pkg_resources\__init__.py", line 784, in resolve
pkg_resources.DistributionNotFound: The 'google-api-python-client' distribution was not found and is required by the application
。。。
exec_模块中的文件“c:\python36\lib\site packages\PyInstaller\loader\pyimod03_importers.py”,第627行
exec(字节码、模块、指令)
文件“site packages\googleapiclient\http.py”,第67行,在
文件“”,第971行,在_find_和_load中
文件“”,第955行,在“查找”和“加载”中解锁
文件“”,第665行,在“加载”中
exec_模块中的文件“c:\python36\lib\site packages\PyInstaller\loader\pyimod03_importers.py”,第627行
exec(字节码、模块、指令)
文件“site packages\googleapiclient\model.py”,第36行,在
get_发行版第479行的文件“site packages\pkg_resources\\ u_init__.py”
文件“site packages\pkg\u resources\\uuuuu init\uuuuuu.py”,第355行,在get\u provider中
文件“site packages\pkg\u resources\\uuuuu init\uuuuuu.py”,第898行,在require中
文件“site packages\pkg\u resources\\uuuuu init\uuuuu.py”,第784行,在resolve中
pkg_resources.DistributionNotFound:未找到“google api python客户端”发行版,该发行版是应用程序所必需的

解决方案1–如果使用fbs或其他通用包装框架
  • 找到
    google\u api\u python\u客户端-*/
    • 可能在某个地方
      /lib/site packages/
  • google\u api\u python\u client-*/
    复制到应用程序的src资源目录中。对于
    fbs
    这可以是:
    • src/freeze/windows/
      (推荐),或
    • src/resources/windows/
  • 现在,当您
    fbs冻结
    并随后
    fbs安装程序
    您的应用程序时,
    google\u api\u python\u客户端-*/
    将与其他
    googleapiclient
    python库一起包含在构建的应用程序目录中,错误应该会消失

    解决方案2-无自动包装挂钩(未经测试): 如果您的包装解决方案没有与上述类似的挂钩,则:

  • 构建你的应用程序
  • 手动将
    /lib/site packages/
    文件夹中的
    google\u-api\u-python\u-client-*/
    复制到内置应用程序的目录中(或编译的python脚本试图访问
    google-api-python-client
    的任何位置)
  • 尝试启动应用程序

  • 确保pip链接到pip3(Python 3)而不是pip2(Python 2)。在许多操作系统和发行版上,情况仍然如此

    检查这是否解决了您的问题:

    python3-mpip安装——升级googleapi-python客户端
    
    如果确实如此,则向.bashrc添加一个将pip链接到pip3而不是pip2的别名

    e、 g

    echo“别名pip='pip3'”>~/.bashrc
    
    如果您正在使用PyCharm进行编码,请执行以下操作:

  • 在终端中运行
    $pip3 freeze
  • 在项目文件夹中创建文件“requirements.txt”
  • 将第一步的结果复制到“requirements.txt”中
  • PyCharm将显示/venv中安装的软件包不满足“requirements.txt”的消息。单击“安装软件包”按钮,等待所有软件包安装完毕,然后再次构建应用程序

  • 我只是想添加到@JoeyPanimation answer中,因为它帮助我在几个小时后解决了这个问题。在您的exe文件夹或库区域中搜索google_api_python_client-1.9.3.dist-info,并将其复制到exe所在的主文件夹中。

    我的案例是一个python Flask windows应用程序,它与Pyinstaller--onefile选项捆绑在一起,使用.spec文件

    我已将文件夹google\u api\u python\u client-1.9.3.dist-info从原始位置(可能是windows site packages文件夹)复制到项目文件夹中

    将以下行添加到Pyinstaller规范文件数据部分(app.spec)是问题的解决方案

    a = Analysis(.......  
    
    datas=[.....
    
    ('project\\google_api_python_client-1.9.3.dist-info','google_api_python_client-1.9.3.dist-info'),     
    
    .......],
    

    我在这里找到了解决办法

    将您的google api python客户端版本更新到链接中指定的版本(对我有用)

    还制作了一个小小的.bat文件:

    pyinstaller --hidden-import="pkg_resources.py2_warn" --hidden-import="googleapiclient" --hidden-import="apiclient"  main.py --onefile
    

    另外值得注意的是:我在虚拟环境中运行了bat文件。

    将Google目录从Python应用程序安装位置的Python//Lib/site packages目录复制到pyinstaller创建的dist/目录。

    解决方案2是我几年来的目标。可以确认它适用于我的Google\u api\u Python\u客户端以及few其他(尽管很乏味)。我可以确认此解决方案是否有效!我将google api python客户端降级如下:pip install google api python client==1.8.0谢谢@endesa的卸载命令。我使用了google api python client 1.12.8,并尝试了几次修复,但都不起作用。降级到1.8.0确实有效。Ans感谢@xander vermaak提供的批处理脚本。I o我的应用只需要
    --hidden import=“GoogleapClient”