我使用系统调用从Matlab调用python脚本。 该脚本正在对https网址发布请求。 这曾经在Ubuntu 14.04中工作,但在16.04停止工作
你可以这样测试:
先决条件:matlab,python,python-requests
$ python -c "import requests; a = requests.get( 'https://github.com');print len(a.text);"
输出:
25696
>> system('python -c "import requests; a = requests.get( ''https://github.com'');print len(a.text);"')
ubuntu 14.04上的输出:
25706
ans =
0
ubuntu 16.04上的输出:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/requests/api.py", line 67, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/api.py", line 53, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 447, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: Can't connect to HTTPS URL because the SSL module is not available.
ans =
1
两种情况下,Matlab版本均为R2014a。 Python版本2
我试图安装不同的软件包版本而没有运气。我不知道应该寻找什么,因为问题似乎是检测到在一个系统中工作的共享库(libssl 1.0.0)并且失败在另一个。我该怎么调试呢?
任何提示都会受到高度赞赏。
答案 0 :(得分:0)
看起来有一个从Matlab运行python的方法来强制python加载适当版本的libssl.o:
RTLD_NOW = 2;
RTLD_DEEPBIND = 8;
flag = bitor(RTLD_NOW, RTLD_DEEPBIND); % RTLD_NOW | RTLD_DEEPBIND
py.sys.setdlopenflags(int32(flag));
py.importlib.import_module('_ssl');