Python 桌面应用程序导致google drive api崩溃

Python 桌面应用程序导致google drive api崩溃,python,google-drive-api,pyinstaller,google-api-python-client,Python,Google Drive Api,Pyinstaller,Google Api Python Client,我使用google drive应用程序使用python编写了一个桌面应用程序,一切正常。但当我使用pyinstaller输出.exe文件并运行该应用程序时。以下线路出现问题: if credentials is None or credentials.invalid: credentials = run(FLOW, storage) 身份验证页面显示,我允许其访问。与往常不同的是,之后没有响应,我发现.exe程序无缘无故退出。 以前有人遇到过这个问题吗?如果是,如何解决 另外,我现在追踪到

我使用google drive应用程序使用python编写了一个桌面应用程序,一切正常。但当我使用pyinstaller输出.exe文件并运行该应用程序时。以下线路出现问题:

if credentials is None or credentials.invalid:
  credentials = run(FLOW, storage)
身份验证页面显示,我允许其访问。与往常不同的是,之后没有响应,我发现.exe程序无缘无故退出。 以前有人遇到过这个问题吗?如果是,如何解决

另外,我现在追踪到了错误,如下所示:

Traceback (most recent call last):
  File "<string>", line 697, in <module>
  File "<string>", line 562, in __init__
  File "build\bdist.win32\egg\oauth2client\tools.py", line 166, in run
  File "build\bdist.win32\egg\oauth2client\client.py", line 1069, in step2_exchange
  File "USB\build\pyi.win32\USB\outPYZ1.pyz/httplib2", line 1544, in request
  File "USB\build\pyi.win32\USB\outPYZ1.pyz/httplib2", line 1294, in _request
  File "USB\build\pyi.win32\USB\outPYZ1.pyz/httplib2", line 1230, in _conn_request
  File "USB\build\pyi.win32\USB\outPYZ1.pyz/httplib2", line 984, in connect
  File "USB\build\pyi.win32\USB\outPYZ1.pyz/httplib2", line 80, in _ssl_wrap_socket
  File "USB\build\pyi.win32\USB\outPYZ1.pyz/ssl", line 381, in wrap_socket
  File "USB\build\pyi.win32\USB\outPYZ1.pyz/ssl", line 141, in __init__
       ssl.SSLError: [Errno 185090050] _ssl.c:340: error:0B084002:x509 certificate rout
       ines:X509_load_cert_crl_file:system lib
回溯(最近一次呼叫最后一次):
文件“”,第697行,在
文件“”,第562行,在_init中__
文件“build\bdist.win32\egg\oauth2client\tools.py”,第166行,正在运行
文件“build\bdist.win32\egg\oauth2client\client.py”,第1069行,在步骤2中
请求中的第1544行文件“USB\build\pyi.win32\USB\outPYZ1.pyz/httplib2”
文件“USB\build\pyi.win32\USB\outPYZ1.pyz/httplib2”,第1294行,在请求中
文件“USB\build\pyi.win32\USB\outPYZ1.pyz/httplib2”,第1230行,在连接请求中
文件“USB\build\pyi.win32\USB\outPYZ1.pyz/httplib2”,第984行,在connect中
文件“USB\build\pyi.win32\USB\outPYZ1.pyz/httplib2”,第80行,在ssl\u wrap\u套接字中
文件“USB\build\pyi.win32\USB\outPYZ1.pyz/ssl”,第381行,在wrap_套接字中
文件“USB\build\pyi.win32\USB\outPYZ1.pyz/ssl”,第141行,在_init中__
ssl.SSLError:[Errno 185090050]\u ssl.c:340:错误:0B084002:x509证书路由
ines:X509\u加载\u证书\u crl\u文件:系统库
我看到有人遇到了类似的错误,但回复说已经解决了。 我也试过这种方法,但不起作用。
有人知道如何修复它吗?

我猜,但这可能与pyinstaller在Windows exe上的STDIN处理有关-通常这对您不可用,因此您可能必须运行自己的自定义流

但您可以将范围缩小到以下任一项:

  • 从标准输入/标准输出读取/写入
  • 启动本地web服务器
  • 启动浏览器
  • 因为所有这些都需要在本地运行流时执行,其中一个对您来说是错误的


    如果您将STDERR记录到文本文件中,您将能够看到哪个部分正在崩溃。

    经过一点挖掘,我发现了基于Dropbox api developer提供的解决方案的解决方案:。这个问题基本上是由以下原因造成的:

     CA_CERTS = os.path.join(os.path.dirname(os.path.abspath(__file__ )), "cacerts.txt")
    
    __file__ is the key that causes this problem. It cannot work normally in the executable program to find the path.
    
    类似的问题可以在这里找到:

    为了解决这个问题,我将上面的代码更改为:

     CA_CERTS = os.path.join(os.path.dirname(sys.executable), "cacerts.txt")
    

    通过执行此操作,.exe程序将尝试在.exe文件所在的目录中查找cacerts.txt。将其编译成.pyc后,我将cacerts.txt放入.exe目录。然后程序可以正常运行。

    实际上,该程序可以启动带有身份验证页的web浏览器,但在单击“允许”后,它应该继续运行,但退出时没有警告或错误消息。你介意告诉我如何记录STDERR吗?对不起,我不熟悉pyinstaller。他有一些信息。