谷歌驱动器api与桌面应用程序崩溃

时间:2012-08-03 09:22:37

标签: python google-drive-api pyinstaller google-api-python-client

我使用谷歌驱动应用程序使用python写了一个桌面应用程序,一切正常。但是当我使用pyinstaller输出.exe文件并运行该应用程序时。这些问题出现了问题:

if credentials is None or credentials.invalid:
  credentials = run(FLOW, storage)

验证页面显示,我允许其访问。与通常不同,之后没有响应,我发现.exe程序没有任何理由退出。 有没有人遇到过这个问题?如果是这样,如何解决?

P.S。我现在追踪错误,结果如下:

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

我看到有人遇到了类似的错误http://code.google.com/p/google-api-python-client/issues/detail?id=58,但回复说它已修好了。 我也尝试了https://github.com/kennethreitz/requests/issues/557中的方法,但它没有用。 有谁知道如何解决它?

2 个答案:

答案 0 :(得分:0)

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

但你可以将其缩小到:

  1. 从STDIN / STDOUT读/写
  2. 启动本地Web服务器
  3. 启动浏览器
  4. 因为在本地运行流程时需要执行所有这些操作,并且其中一个对您来说是错误的。

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

答案 1 :(得分:0)

经过深入挖掘后,我发现解决方案基于Dropbox api开发人员提供的解决方案:https://forums.dropbox.com/topic.php?id=65523&replies=1#post-461457。这个问题基本上是由:

引起的
 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.

类似的问题可以在这里找到:pyinstaller seems not to find a data file

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

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

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