0

我使用谷歌驅動器應用程序使用Python寫了一個桌面應用程序,一切工作正常。但是,當我使用pyinstaller輸出一個.exe文件並運行該應用程序。這些行上出現問題:谷歌驅動器API崩潰與桌面應用程序

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中的方法,但它不起作用。 有誰知道如何解決它?

回答

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目錄下。然後程序可以正常運行。

0

我在猜測,但這可能與Windows上的exe的處理有關,可能來自pyinstaller - 通常這不會提供給您,所以您可能必須運行自己的自定義流。

但你可以縮小它可以:

  1. 讀/從標準輸入/輸出
  2. 寫入開始本地Web服務器
  3. 啓動瀏覽器

由於所有這些需要在本地運行流程時執行,其中一個出錯了。

如果您將STDERR記錄到文本文件中,您將能夠看到哪部分崩潰。

+0

實際上,程序可以啓動具有認證頁面的網頁瀏覽器,但點擊允許後,它應該繼續,但它只是退出,沒有任何警告或錯誤消息。你介意告訴我如何登錄STDERR? – 2012-08-05 02:18:28

+0

對不起,我不熟悉pyinstaller。 http://www.pyinstaller.org/export/develop/project/doc/Manual.html?format=raw有一些信息。 – 2012-08-05 11:56:34

+0

我跟蹤錯誤,但它是關於SSL證書的事情: – 2012-08-06 07:09:57

相關問題