SSLError:不是目录

时间:2016-03-13 17:08:46

标签: python macos python-2.7 ssl python-requests

我在Mac OS上的C ++应用程序中使用嵌入版本的Python 2.7中的优秀requests模块。我的代码在我的Mac上正常运行,但它并不适用于客户端的机器。他正在使用相同版本的Python和C ++主机应用程序。他通过以下网址获得的错误是:

http://www.hantmade.com/backstage/thumb/1450544739_Impression%20XL%20300%20RZ.stage.png

Traceback (most recent call last):
  File "'hantmade-storage.pyp'", line 1468, in online_load_thumbnail
  File "c:\maxon\cinema 4d r16 dev\plugins\hantmade_storage\devel\requests/requests\api.py", line 69, in get
  File "c:\maxon\cinema 4d r16 dev\plugins\hantmade_storage\devel\requests/requests\api.py", line 50, in request
  File "c:\maxon\cinema 4d r16 dev\plugins\hantmade_storage\devel\requests/requests\sessions.py", line 468, in request
  File "c:\maxon\cinema 4d r16 dev\plugins\hantmade_storage\devel\requests/requests\sessions.py", line 597, in send
  File "c:\maxon\cinema 4d r16 dev\plugins\hantmade_storage\devel\requests/requests\sessions.py", line 195, in resolve_redirects
  File "c:\maxon\cinema 4d r16 dev\plugins\hantmade_storage\devel\requests/requests\sessions.py", line 576, in send
  File "c:\maxon\cinema 4d r16 dev\plugins\hantmade_storage\devel\requests/requests\adapters.py", line 433, in send
SSLError: [Errno 20] Not a directory
  

注意:绝对Windows风格的路径似乎源于requests模块是从一组.pyc文件加载而显然原始源文件& #39; s路径被编译到它们中。

再一次,我不能在Mac上重现这个问题。这个错误可能来自哪里?为什么"不是目录"?有没有调试此问题的步骤?

如果有必要,我可以通过TeamViewer登录客户端的机器并修改源代码来调试问题,但我还没有感觉到它的需要,因为我对这个错误感到十分困惑

更新2016-03-15

突然间我也收到了SSLError,我客户端的消息也发生了变化。奇怪的是,代码中没有任何改变。我将继续谷歌搜索,这些错误消息似乎是提供信息,并最终已经讨论过它们。

我的客户看到了什么:

SSLError: [Errno 185090050] _ssl.c:326: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib

我所看到的:

SSLError: [Errno 1] _ssl.c:480: error:0D0890A1:asn1 encoding routines:ASN1_verify:unknown message digest algorithm

1 个答案:

答案 0 :(得分:2)

对于“Not a directory”错误,我们认为软件的分布式版本没有将请求模块的cacert.pem文件打包到Python Egg中。这是一个问题。

另一个问题似乎是当使用Python 2.6或更早版本时,ssl模块无法与服务器通信。我能够通过在较新版本中手动编译Python SSL module来解决这个问题。由于该软件是在嵌入式Python版本中运行的,因此我不能仅仅依赖于依赖关系并使我的软件尽可能地封装。我使用_localimport类暂时删除原始ssl模块,导入新编译的ssl模块和requests

with _localimport(lib_path) as importer:
  importer.disable(['ssl', 'requests'])
  import ssl, requests
  assert issubpath(ssl.__file__, lib_path)
  assert issubpath(requests.__file__, lib_path)

Libs文件夹:

libs/
  ssl-1.16-macosx-10.5-x86_64-2.6.egg
  requests-v2.9.1.egg

请注意,这些SSL问题仅在Mac上出现。