python 请求和 cx_freeze

2024-02-16

我试图冻结一个依赖于请求的 python 应用程序,但出现以下错误:

Traceback (most recent call last):
  File "c:\Python33\lib\site-packages\requests\packages\urllib3\util.py", line 630, in ssl_wrap_socket
    context.load_verify_locations(ca_certs)
FileNotFoundError: [Errno 2] No such file or directory

似乎无法找到带有可执行文件的 ssl 证书。我发现this https://stackoverflow.com/questions/15157502/requests-library-missing-file-after-cx-freeze这似乎是同样的问题,但我无法弄清楚他们是如何让它发挥作用的。主要问题似乎是请求捆绑的证书没有复制到压缩库中。所以看来我必须强制 cx_freeze 捆绑证书,然后从我的脚本中指向它。

从这个简单的脚本开始一切正常:

import requests
r = requests.get("https://yourapihere.com")
print(r.json())

然后,如果我添加证书文件,我会收到错误:

import requests
r = requests.get("https://yourapihere.com", cert=requests.certs.where())
print(r.json())

-

Traceback (most recent call last):
  File "c:\Python33\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 480, in urlopen
    body=body, headers=headers)
  File "c:\Python33\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 285, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "c:\Python33\lib\http\client.py", line 1065, in request
    self._send_request(method, url, body, headers)
  File "c:\Python33\lib\http\client.py", line 1103, in _send_request
    self.endheaders(body)
  File "c:\Python33\lib\http\client.py", line 1061, in endheaders
    self._send_output(message_body)
  File "c:\Python33\lib\http\client.py", line 906, in _send_output
    self.send(msg)
  File "c:\Python33\lib\http\client.py", line 844, in send
    self.connect()
  File "c:\Python33\lib\site-packages\requests\packages\urllib3\connection.py", line 164, in connect
    ssl_version=resolved_ssl_version)
  File "c:\Python33\lib\site-packages\requests\packages\urllib3\util.py", line 637, in ssl_wrap_socket
    context.load_cert_chain(certfile, keyfile)
ssl.SSLError: [SSL] PEM lib (_ssl.c:2155)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:\Python33\lib\site-packages\requests\adapters.py", line 330, in send
    timeout=timeout
  File "c:\Python33\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 504, in urlopen
    raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: [SSL] PEM lib (_ssl.c:2155)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "example.py", line 10, in <module>
    r = requests.get("https://yourapihere.com", cert=requests.certs.where())
  File "c:\Python33\lib\site-packages\requests\api.py", line 55, in get
    return request('get', url, **kwargs)
  File "c:\Python33\lib\site-packages\requests\api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "c:\Python33\lib\site-packages\requests\sessions.py", line 383, in request
    resp = self.send(prep, **send_kwargs)
  File "c:\Python33\lib\site-packages\requests\sessions.py", line 486, in send
    r = adapter.send(request, **kwargs)
  File "c:\Python33\lib\site-packages\requests\adapters.py", line 385, in send
    raise SSLError(e)
requests.exceptions.SSLError: [SSL] PEM lib (_ssl.c:2155)

我想我正在使用它正确地 http://docs.python-requests.org/en/latest/user/advanced/#ssl-cert-verification,但无法真正弄清楚为什么它不起作用。我想修复此问题后我可以继续并将证书添加到 cx_freeze 捆绑包中,如下所示:

示例.py:

import os
import requests

cert = os.path.join(os.path.dirname(requests.__file__),'cacert.pem')
r = requests.get("https://yourapihere.com", cert=cert)
print(r.json())

设置.py:

from cx_Freeze import setup, Executable

import requests.certs
build_exe_options = {"zip_includes":[(requests.certs.where(),'requests/cacert.pem')]}

executables = [
    Executable('example.py')
]

setup(
      executables=executables
      )

如果有人能给我一个小费,我将不胜感激。


我从另一个对我有用的线程中找到了这条评论:https://stackoverflow.com/a/25239701/3935084 https://stackoverflow.com/a/25239701/3935084

总结如下:

您还可以使用环境变量“REQUESTS_CA_BUNDLE”(如上所述http://docs.python-requests.org/en/latest/user/advanced/#ssl-cert-verification http://docs.python-requests.org/en/latest/user/advanced/#ssl-cert-verification)

这比纠正您的所有请求要简单得多:

os.environ["REQUESTS_CA_BUNDLE"] = os.path.join(os.getcwd(), "cacert.pem")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 请求和 cx_freeze 的相关文章

随机推荐

  • 使用awk解析

    如何使用 awk 根据另一个文件的数据解析文件 我做了一个脚本 BEGIN FS t OFS t while getline lt headfpkm gt 0 a id a 1 fpkm a 2 print id a fpkm a last
  • Sass::SyntaxError:未定义的 mixin 'mixin_name'

    我正在开发一个 Rails 4 项目 其中使用 Sass 和 Sass 的 import 将多个 css 合并为一个 它工作正常 但如果我使用新的混入部分则不行 mixins css scss 和 import这个main css scss
  • 如何以编程方式获取 SVN 修订号?

    喜欢这个问题 https stackoverflow com questions 681770 how to programmatically get svn revision description and author in c 但不需
  • 当 transactionManager 未命名为“transactionManager”时

    我正在尝试 Spring 3 0 2 RELEASE 和 JPA2 和 Hibernate 3 5 1 Final 令我不安的一件事是 spring 似乎只接受名为 transactionManager 的事务管理器 如果我不将其命名为 t
  • 如何在 MacOS X 上以编程方式打开控制台窗口

    我想知道 是否可以在 MacOS X 上以编程方式打开控制台窗口并将 IO 重定向到它 类似于AllocConsole GetStdHandle Windows 上的 API 我打算在 xxx app 应用程序中使用它 该应用程序默认情况下
  • gdb在检查内存时如何同时显示hex和ascii?

    使用 x 100c 时 输出显示 ascii 和十进制 0x111111 40 40 gdb如何同时显示ascii和hex like 0x111111 0x28 C 0x28 C 这种格式更好 0x111111 0x28 0x28 CC 您
  • WooCommerce 可变产品通知问题 - 请选择产品选项

    我正在建立一个电子商务网站 我在使用 WooCommerce 时遇到一些问题可变产品 添加到购物车 按钮适用于简单产品 但不适用于可变产品 它给出了一个 Please choose product options notice 我到处寻找并
  • 如何在.NET中为SmtpClient对象设置用户名和密码?

    我看到不同版本的构造函数 一种使用 web config 中的信息 一种指定主机 一种指定主机和端口 但是如何将用户名和密码设置为与 web config 不同的内容呢 我们遇到的问题是我们的内部 smtp 被一些高安全性客户端阻止 并且我
  • 电子标题栏“无拖动”和“拖动”不起作用

    我有一个 topleft红色标题栏包含多个 选项卡 按钮 应填充所有可用空间except a topright蓝色块 可以通过单击并拖动来移动 Electron 主窗口 topleft的红色背景 感谢 webkit app region d
  • 如何在集群外部访问/公开 kubernetes-dashboard 服务?

    我有以下服务 ubuntu master kubectl get services all namespaces NAMESPACE NAME CLUSTER IP EXTERNAL IP PORT S AGE default kubern
  • 堆上数组的初始化

    如何手动初始化堆上数组中的值 如果数组是局部变量 在堆栈中 则可以以非常优雅且简单的方式完成 如下所示 int myArray 3 1 2 3 不幸的是 下面的代码 int myArray new int 3 myArray 1 2 3 编
  • 如何注入模拟程序集以与 Moq 一起使用

    我的控制器中有一个方法 它将属性数据从当前执行的程序集返回到分部视图中 在这个例子中 我只是拉动标题 但我需要用它做更多的事情 控制器 var title var asm Assembly GetExecutingAssembly var
  • jQuery - 通过文本描述设置选择控件的选定值

    我有一个选择控件 在 JavaScript 变量中我有一个文本字符串 使用 jQuery 我想将选择控件的选定元素设置为具有我拥有的文本描述的项目 而不是我没有的值 我知道按值设置它非常简单 例如 my select val myVal 但
  • 获取那些有子子 ul 的 li

    如何获得那些li有孩子的ul 我想将 CSS 设置为那些li 我无法设置班级 因为li是动态打印的 当我如下设置 CSS 时 它设置了所有父级li来加 ul width 200px position relative ul li posit
  • 贝塞尔曲线和画布

    如何在画布上绘制贝塞尔曲线 我只有起点和终点 我想从起点到终点画一条线 我怎样才能做到这一点 您可以使用Path quadTo or Path cubicTo 为了那个原因 示例可以在 SDK 示例 FingerPaint 中找到 在你的情
  • backbone.js 解析 1 个元素(Id)

    对于骨干模型上的 id 来说 它只是id并且全部小写 如果我在服务器上的Id被调用怎么办UserId 在主干的解析方法中 我该如何更改UserId to id并对所有其他属性使用相同的名称 For eg window User Backbo
  • JTable 的页脚

    JTable 不支持显示包含每列聚合数据的页脚 受到建议解决方案的启发Oracle Suns 错误数据库 https bugs java com bugdatabase view bug bug id 4242646看起来很有希望 我从用滚
  • Python + 正则表达式:如何在Python中提取两个下划线之间的值?

    我正在尝试提取两个下划线之间的值 为此我写了这段代码 patient ids for file in files print file patient id re findall file patient ids append patien
  • componentWillReceiveProps 与 getDerivedStateFromProps

    componentWillReceiveProps 和 getDerivedStateFromProps 到底是什么对我来说是个微妙的问题 因为 我在使用 getDerivedStateFromProps 时遇到了一个问题 Componen
  • python 请求和 cx_freeze

    我试图冻结一个依赖于请求的 python 应用程序 但出现以下错误 Traceback most recent call last File c Python33 lib site packages requests packages ur