0

私はGoogleドライブアプリケーションを使用し、Pythonを使用してデスクトップアプリケーションを作成しましたが、すべて正常に動作します. しかし、pyinstaller を使用して .exe ファイルを出力し、そのアプリケーションを実行すると。次の行で問題が発生します。

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

認証ページが表示され、アクセスを許可します。いつもと違って、その後応答がなく、.exe プログラムが理由もなく終了することがわかりました。以前にこの問題に遭遇した人はいますか?もしそうなら、それを解決する方法は?

PS私は今エラーを追跡しました、そしてそれは次のとおりです:

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の方法も試しましたが、うまくいきません。誰もそれを修正する方法を知っていますか?

4

2 に答える 2

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 はデータファイルを見つけられないようです

この問題を解決するために、上記のコードを次のように変更します。

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

これにより、.exe プログラムは、.exe ファイルがあるディレクトリで cacerts.txt を見つけようとします。これを .pyc にコンパイルした後、cacerts.txt を .exe ディレクトリに配置しました。その後、プログラムは正常に実行できます。

于 2012-08-16T06:16:34.987 に答える
0

私は推測していますが、これは pyinstaller からの Windows exe での STDIN 処理に関連している可能性があります。通常、これは利用できないため、独自のカスタム フローを実行する必要がある場合があります。

ただし、次のいずれかに絞り込むことができます。

  1. STDIN/STDOUT からの読み取り/書き込み
  2. ローカル Web サーバーの開始
  3. ブラウザの起動

これらはすべて、フローをローカルで実行するときに実行する必要があり、そのうちの 1 つがうまくいかないためです。

STDERR をテキスト ファイルに記録すると、クラッシュしている部分を確認できます。

于 2012-08-04T20:37:45.757 に答える