3

Google ドライブにファイルをアップロードできる Python プログラムを作成しました。.py ファイルは完全に機能し、エラーは発生しません。

しかし、Python をインストールしていない人に配布するので、プログラムとリソースを .exe に変換する必要があります。これは cx_Freeze で行いました。以前に使用したことがありますが、常に機能しています。

しかし現在、.exe の実行時に Google Drive API がエラーを引き起こしているようです。これが与えるエラーは次のとおりです。

Traceback (most recent call last):
File "C:\Python27\lib\runpy.py", line 162, in _run_module_as_main
  "__main__", fname, loader, pkg_name)

File "C:\Python27\lib\runpy.py", line 72, in _run_code
  exec code in run_globals

File "Test.py", line 41, in <module>

File "C:\Python27\lib\oauth2client\util.py", line 128, in positional_wrapper
  return wrapped(*args, **kwargs)

File "C:\Python27\lib\oauth2client\client.py", line 1283, in step2_exchange
  headers=headers)

File "C:\Python27\lib\site-packages\httplib2-0.8-py2.7.egg\httplib2\__init__.p
y", line 1570, in request
  (response, content) = self._request(conn, authority, uri, request_uri, metho
d, body, headers, redirections, cachekey)

File "C:\Python27\lib\site-packages\httplib2-0.8-py2.7.egg\httplib2\__init__.p
y", line 1317, in _request
  (response, content) = self._conn_request(conn, request_uri, method, body, he
aders)

File "C:\Python27\lib\site-packages\httplib2-0.8-py2.7.egg\httplib2\__init__.p
y", line 1252, in _conn_request
  conn.connect()

File "C:\Python27\lib\site-packages\httplib2-0.8-py2.7.egg\httplib2\__init__.p
y", line 1021, in connect
  self.disable_ssl_certificate_validation, self.ca_certs)

File "C:\Python27\lib\site-packages\httplib2-0.8-py2.7.egg\httplib2\__init__.p
y", line 80, in _ssl_wrap_socket
  cert_reqs=cert_reqs, ca_certs=ca_certs)

File "C:\Python27\lib\ssl.py", line 383, in wrap_socket
  ciphers=ciphers)

File "C:\Python27\lib\ssl.py", line 141, in __init__
  ciphers)

ssl.SSLError: [Errno 185090050] _ssl.c:340: error:0B084002:x509 certificate rout
ines:X509_load_cert_crl_file:system lib

ユーザーが認証コードを入力すると、このエラーが発生します。

いくつかのデバッグの後、この問題を引き起こしている行が

credentials = flow.step2_exchange(code)

コードのスニペットを次に示します。

flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE, REDIRECT_URI)
authorize_url = flow.step1_get_authorize_url()
webbrowser.open(authorize_url)
code = raw_input('Enter verification code: ').strip()
credentials = flow.step2_exchange(code)
http = httplib2.Http()
http = credentials.authorize(http)
drive_service = build('drive', 'v2', http=http)

CLIENT_ID、CLIENT_SECRET、OAUTH_SCOPE、および REDIRECT_URI がすべて正しく構成されている。

では、ここで何が問題になるのでしょうか?

さらにコードを表示する必要がある場合は、質問してください。この質問を更新します。

4

1 に答える 1

5

SSL 証明書が見つからないようです。httplib2 はそれらをファイル システムからロードし、cx_Freeze にそれらをバンドルされたパッケージに入れるように指示するものは何もないため、これはある程度理解できます。

これを読んでください。

于 2013-05-20T04:34:36.670 に答える