2

pythonideとcmdプロンプトでWindowsマシンで正常に実行されているPythonコードがいくつかあります。

pyinstallerで(1つのファイルに)コンパイルした後、次のエラーが発生します:

Traceback <most recent call last>:
    File "<string>", line 51, in <module>
    File "build\bdist.win32\egg\oauth2\__init__.py", line 682, in request
    ... ((traceback through httplib2 and then ssl))
ssl.SSLError: [Errno 185090050] _ssl.c:340: error:0B084002:x509 certificates routines:X509_load_cert_crl_file:system lib

エラーの原因となっているコードのサブセットは次のとおりです。

     import oauth2 as oauth
     import httplib2
     import urlparse

     #consumer inputs
     consumer_key    =   'blah'
     consumer_secret =   'blah'
     consumer = oauth.Consumer(consumer_key, consumer_secret)

     #other inputs
     request_token_url = 'https://api.linkedin.com/uas/oauth/requestToken?scope=r_network'
     access_token_url =  'https://api.linkedin.com/uas/oauth/accessToken'
     authorize_url =     'https://api.linkedin.com/uas/oauth/authorize'

     #instantiate consumer object
     client = oauth.Client(consumer)
     resp, content = client.request(request_token_url, "POST", )

単純なAPIリクエストである必要があります!私は全体を見渡して、コードの最初に次のものを使用しようとしました:

    httplib2.Http(ca_certs = 'cacert.pem')

...それはうまくいきませんでした。

また、httplib2フォルダー内のcacerts.txtファイルを新しいcacert.pem(cacerts.txtに名前が変更されました)に置き換えました...しかし、それは機能しませんでした。

私はこれでSSLを無効にしようとしました:

    httplib2.Http(disable_ssl_certificate_validation=True)

...しかし、それはうまくいきませんでした。

混乱しない方法でpyinstallerを使用してPythonスクリプトをコンパイルするにはどうすればよいですか?

4

3 に答える 3

4

OAuth 2.0でGoogleドライブに接続しようとしたときに、同じ問題が発生しました。私は検索し、解決策がinit.pyこの行のhttplib2で変更されていることを発見しまし

CA_CERTS = os.path.join(
    os.path.dirname(os.path.abspath(__file__ )), "cacerts.txt")

この他によって

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

次に、.exeをビルドし、「cacerts.txt」ファイルを.exeの同じフォルダーに配置します。

それは私のために働きました、私はそれがあなたのためにも働くことを願っています!

于 2013-01-24T12:19:20.983 に答える
0

私自身の問題を解決しました!私のコードのこの各行の後:

    client = oauth.Client(consumer)

私はこの行を追加しました:

    client.ca_certs = os.path.join(os.path.dirname(__file__),'cacert.pem')

次に、exeファイルで「cacert.pem」ファイルを保持しました。超簡単。

于 2013-01-24T16:23:52.353 に答える
-1

システムでcacerts.txtファイルを見つけて、それを読み取る権限があることを確認する必要があります。

于 2013-08-19T03:41:48.960 に答える