when I run a python module which imports ssl.py , error occurs . but it's ok to run the straight python.
5 views (last 30 days)
Show older comments
gary zhang
on 25 Jul 2016
Commented: Adam Roach
on 13 Dec 2019
the error information is: Python Error: ImportError: dlopen(/Users/garyzhang/anaconda2/lib/python2.7/lib-dynload/_ssl.so, 2): Symbol not found: _SSL_CTX_set_alpn_protos Referenced from: /Users/anaconda2/lib/python2.7/lib-dynload/_ssl.so Expected in: /Applications/MATLAB_R2016a.app/bin/maci64/libssl.1.0.0.dylib in /Users/anaconda2/lib/python2.7/lib-dynload/_ssl.so
0 Comments
Accepted Answer
Robert Snoeberger
on 26 Jul 2016
Your issue looks like a library conflict with MATLAB's version of libssl, based on the part of the error message that says, "Expected in: /Applications/MATLAB_R2016a.app/bin/maci64/libssl.1.0.0.dylib". Notice that the library is part of the installation for MATLAB R2016a.
A workaround to try is to set the dlopen flag to RTLD_NOW | RTLD_DEEPBIND [1], which can be done with Python's sys.setdlopenflags [2]. This workaround was successful in a similar library conflict [3].
Example
>> 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');
References
1 Comment
Adam Roach
on 13 Dec 2019
Hi Robert,
I'm having this same problem and trying to follow the workaround you described but the setdlopenflags line is throwing an exception:
Undefined variable "py" or class "py.sys.setdlopenflags".
I'm running Matlab R2018b, with python 3.7 on a windows 10 machine.
More Answers (3)
Bo Li
on 25 Jul 2016
Did you call "import matlab.engine" before "import ssl"? What happens if you call "import ssl" before "import matlab.engine"?
It looks like the library used by your ssl.py is not compatible with the libssl shipped by MATLAB.
0 Comments
gary zhang
on 27 Jul 2016
2 Comments
Robert Snoeberger
on 27 Jul 2016
Hi Gary, Thanks for trying the workaround. That is very interesting that flag = 0 worked for you. I believe that 0 is the value of RTLD_LOCAL. Just curious, what was the value of flag before you set it to 0? You should be able to check with py.sys.getdlopenflags. For me, the value is 2.
See Also
Categories
Find more on Call MATLAB from Python in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!