- http://man7.org/linux/man-pages/man8/ld.so.8.html -- Search for "LD_PRELOAD". It should say, "A list of additional, user-specified, ELF shared objects to be loaded before all others..."
Importing custom python module fails
45 views (last 30 days)
Fernando Bechtelar on 26 Jan 2016
I am using Matlab2014b and try to import python packages. I am on a linux computer and executing the command py.numpy.* works and py.importlib.import_module('numpy') gives me the correct output. However, numpy lives in my /usr/lib/pymodules/python2.7/ directory, which according to the output of py.sys.path is in the search directory, so the import should work.
However, I have another package that I would like to include, which is in /usr/lib/python2.7/dist-packages/. Again, according to py.sys.path, this directory is included in the search path, however, importing the package fails ("Import argument 'py.fabio' cannot be found or cannot be imported."). I hope someone has an advice how to solve this problem.
PS: pyversion returns my current installation (2.7) and shows isloaded: 1
PPS: Adding the directory to the search path, as outlined in http://www.mathworks.com/help/matlab/matlab_external/call-python-from-matlab.html has failed.
PPPS: When I try to get feedback from py.importlib.import_module, Matlab crashes.
Robert Snoeberger on 28 Jan 2016
Edited: Robert Snoeberger on 28 Jan 2016
Based on the stack trace, your issue looks like a library conflict with libhdf5.so. It seems like the libhdf5 that is in the stack trace is a library that is installed with MATLAB; I am assuming this based on the '/matlab_2015b/bin/glnxa64/' in the path to the library. I would guess that the appropriate version of libhdf5.so for Python should be located at /usr/lib/libhdf5.so. Try the following command to look for the correct libhdf5.so.
ldd /usr/lib/python2.7/dist-packages/h5py/h5f.so | grep libhdf5
My hunch about the library conflict is further confirmed by the fact that the libhdf5.so function that is executing is called H5check_version (line  of the stack trace). The documentation I found for that function says, "If this check fails, H5check_version causes the application to abort (by means of a standard C abort() call)..." .
Assuming you aren't using MATLAB's interface to HDF5, you should be able to use LD_PRELOAD to load the correct version of libhdf5.so [2,3].
More Answers (1)
Rafael Rebouças on 19 Jan 2021
Edited: Rafael Rebouças on 19 Jan 2021
% Simple way to load your library
copyfile(my_library_file_path, pwd, 'f');
% It's necessary to load library
Now, your Python library is loaded to use in any directory.