2

我有一些在 python ide 和 cmd 提示符下成功运行在我的 windows 机器上的 python 代码。

在我用 pyinstaller 编译(到一个文件中)后,我收到以下错误:

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')

……那没用。

我还用新的 cacert.pem(重命名为 cacerts.txt)替换了我在 httplib2 文件夹中的 cacerts.txt 文件……但这没有用。

我试图用这个禁用ssl:

    httplib2.Http(disable_ssl_certificate_validation=True)

...但这没有用。

如何使用 pyinstaller 编译我的 python 脚本,而不会弄乱?

4

3 回答 3

4

当我尝试使用 OAuth 2.0 连接到谷歌驱动器时,我遇到了同样的问题。我搜索并发现解决方案在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')

然后我只是将“cacert.pem”文件与我的 exe 一起保存。超级容易。

于 2013-01-24T16:23:52.353 回答
-1

您必须在系统中找到 cacerts.txt 文件并确保您有权读取它。

于 2013-08-19T03:41:48.960 回答