我在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
答案 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上出现。