why can't MATLAB import this python library? -
i'd use http://www.losonczylab.org/sima/1.2/ within matlab.
i can run fine python.
i can import example dependencies in matlab.
$ /opt/local/bin/python python 2.7.9 (default, dec 13 2014, 15:13:49) [gcc 4.2.1 compatible apple llvm 6.0 (clang-600.0.56)] on darwin type "help", "copyright", "credits" or "license" more information. >>> sima import sequence >>> sequence <module 'sima.sequence' '/users/eflister/library/python/2.7/lib/python/site-packages/sima/sequence.pyc'> >>> sima import imagingdataset >>> imagingdataset <class 'sima.imaging.imagingdataset'>
in matlab:
>> pyversion /opt/local/bin/python >> pyversion version: '2.7' executable: '/opt/local/library/frameworks/python.framework/versions/2.7/resources/python.app/cont...' library: '/opt/local/library/frameworks/python.framework/versions/2.7/lib/libpython2.7.dylib' home: '/opt/local/library/frameworks/python.framework/versions/2.7' isloaded: 0 >> import py.picos.tools.available_solvers >> available_solvers ans = python list no properties. ['cvxopt', 'mosek7'] >> import py.numpy.empty >> empty(0) ans = python ndarray properties: t: [1x1 py.numpy.ndarray] base: [1x1 py.nonetype] ctypes: [1x1 py.numpy.core._internal._ctypes] data: [1x0 py.buffer] dtype: [1x1 py.numpy.dtype] flags: [1x1 py.numpy.flagsobj] flat: [1x1 py.numpy.flatiter] imag: [1x1 py.numpy.ndarray] itemsize: 8 nbytes: 0 ndim: 1 real: [1x1 py.numpy.ndarray] shape: [1x1 py.tuple] size: 0 strides: [1x1 py.tuple] [] >> import py.sima.sequence error using import import argument 'py.sima.sequence' cannot found or cannot imported. >> import py.sima.sequence error using import import argument 'py.sima.sequence' cannot found or cannot imported. >> import py.sima.sequence.create error using import import argument 'py.sima.sequence.create' cannot found or cannot imported. >> import py.sima.sequence.create error using import import argument 'py.sima.sequence.create' cannot found or cannot imported. >> import py.sima.sequence error using import import argument 'py.sima.sequence' cannot found or cannot imported. >> import py.sima.sequence error using import import argument 'py.sima.sequence' cannot found or cannot imported. >> import py.sima.imagingdataset error using import import argument 'py.sima.imagingdataset' cannot found or cannot imported. >> import py.sima.imagingdataset error using import import argument 'py.sima.imagingdataset' cannot found or cannot imported. >> import py.sima error using import import argument 'py.sima' cannot found or cannot imported.
how can figure out why sima
can't imported?
sima
on path:
>> pp = py.pprint.prettyprinter pp = python prettyprinter no properties. <pprint.prettyprinter instance @ 0x129425bd8> >> pp.pprint(py.sys.path) ['', '/opt/local/library/frameworks/python.framework/versions/2.7/lib/python27.zip', '/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7', '/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/plat-darwin', '/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/plat-mac', '/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/lib-tk', '/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/lib-old', '/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/readline', '/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/lib-dynload', '/users/eflister/library/python/2.7/lib/python/site-packages', '/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages']
i came following tedious method find problem imports -- there better way?
- define module in http://www.mathworks.com/help/matlab/matlab_external/call-user-defined-custom-module.html
- copy in imports source files in library matlab won't load
- comment out suspect imports until matlab call module succeeds
- rename module , repeat (once loaded, matlab has restart see new changes)
i had 29 times isolate following problematic imports in sima
. :)
from pil import image skimage.measure import approximate_polygon skimage.measure import find_contours skimage.filter import threshold_otsu skimage import transform tf sklearn.decomposition import fastica import scipy.io scipy.stats import uniform scipy.linalg import inv scipy.sparse.linalg import eigsh, eigs scipy.sparse.linalg import inv scipy import ndimage scipy.ndimage import measurements import cv2 # note following ok: scipy.linalg import eig, eigh, norm scipy import sparse multiprocessing import pool import multiprocessing.util util
running code in python shows no import exceptions:
lines = """ import h5py pil import image skimage.measure import approximate_polygon skimage.measure import find_contours skimage.filter import threshold_otsu skimage import transform tf sklearn.decomposition import fastica import scipy.io scipy.stats import uniform scipy.linalg import inv scipy.sparse.linalg import eigsh, eigs scipy.sparse.linalg import inv scipy import ndimage scipy.ndimage import measurements import cv2 """ def tryimport(i): try: exec(i) except importerror e: print print e print map(tryimport, filter(lambda x: len(x) > 0, lines.splitlines()))
but in matlab, gives output:
import h5py cannot import name _errors pil import image dlopen(/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/pil/_imaging.so, 2): library not loaded: /opt/local/lib/libtiff.5.dylib referenced from: /opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/pil/_imaging.so reason: incompatible library version: _imaging.so requires version 8.0.0 or later, libtiff.5.dylib provides version 6.0.0 skimage.measure import approximate_polygon cannot import name _ni_support skimage.measure import find_contours cannot import name _ni_support skimage.filter import threshold_otsu cannot import name _ni_support skimage import transform tf cannot import name hough_ellipse sklearn.decomposition import fastica dlopen(/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/optimize/_lbfgsb.so, 2): symbol not found: __gfortran_transfer_character_write referenced from: /opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/optimize/_lbfgsb.so expected in: /applications/matlab_r2015a.app/sys/os/maci64/libgfortran.3.dylib in /opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/optimize/_lbfgsb.so import scipy.io cannot import name doccer scipy.stats import uniform dlopen(/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/special/_ufuncs.so, 2): symbol not found: __gfortran_stop_numeric_f08 referenced from: /opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/special/_ufuncs.so expected in: /applications/matlab_r2015a.app/sys/os/maci64/libgfortran.3.dylib in /opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/special/_ufuncs.so scipy.sparse.linalg import eigsh, eigs dlopen(/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/sparse/linalg/eigen/arpack/_arpack.so, 2): symbol not found: __gfortran_transfer_array_write referenced from: /opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/sparse/linalg/eigen/arpack/_arpack.so expected in: /applications/matlab_r2015a.app/sys/os/maci64/libgfortran.3.dylib in /opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/sparse/linalg/eigen/arpack/_arpack.so scipy.sparse.linalg import inv dlopen(/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/sparse/linalg/eigen/arpack/_arpack.so, 2): symbol not found: __gfortran_transfer_array_write referenced from: /opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/sparse/linalg/eigen/arpack/_arpack.so expected in: /applications/matlab_r2015a.app/sys/os/maci64/libgfortran.3.dylib in /opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/sparse/linalg/eigen/arpack/_arpack.so scipy import ndimage cannot import name _ni_support scipy.ndimage import measurements cannot import name _ni_support import cv2 dlopen(/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/cv2.so, 2): library not loaded: /opt/local/lib/libtiff.5.dylib referenced from: /opt/local/lib/libopencv_highgui.2.4.dylib reason: incompatible library version: libopencv_highgui.2.4.dylib requires version 8.0.0 or later, libtiff.5.dylib provides version 6.0.0
i found method shows errors matlab:
>> py.importlib.import_module('sima') python error: cannot import name hough_ellipse
so there hope in proceeding here?
i don't understand errors, best can surmise, of them are:
matlab's libtiff.5.dylib provides version 6.0.0, pil , opencv require >= 8.0.0
matlab's libgfortran.3.dylib doesn't work scipy's _lbfgsb.so, _ufuncs.so, _arpack.so
would there way compile scipy/pil/opencv
against matlab's libraries?
would extremely painful? :)
i've found following 3rd party python-from-matlab bridges:
- http://algoholic.eu/matpy/ -- numpy.ndarray integration
- https://github.com/kw/pymex -- numpy.ndarray integration, less recent development, looks good
- https://github.com/pv/pythoncall -- older, looks less polished
- https://code.google.com/p/python-matlab-wormholes/ -- old, ndarray's only, bidirectional on tcp
are there others consider? opinions/experience on promising scenario? i'm guessing matpy...
pymex no good
matpy no good:
>> py_shell py> import sima traceback (most recent call last): file "<string>", line 1, in <module> file "/users/eflister/library/python/2.7/lib/python/site-packages/sima/__init__.py", line 6, in <module> sima.imaging import imagingdataset file "/users/eflister/library/python/2.7/lib/python/site-packages/sima/imaging.py", line 26, in <module> import h5py file "/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/h5py/__init__.py", line 23, in <module> . import _conv file "h5py/h5t.pxd", line 14, in init h5py._conv (/opt/local/var/macports/build/_opt_mports_dports_python_py-h5py/py27-h5py/work/h5py-2.5.0/h5py/_conv.c:6958) file "h5py/h5t.pyx", line 139, in init h5py.h5t (/opt/local/var/macports/build/_opt_mports_dports_python_py-h5py/py27-h5py/work/h5py-2.5.0/h5py/h5t.c:20282) file "h5py/h5t.pyx", line 73, in h5py.h5t.lockid (/opt/local/var/macports/build/_opt_mports_dports_python_py-h5py/py27-h5py/work/h5py-2.5.0/h5py/h5t.c:2562) file "h5py/h5t.pyx", line 42, in h5py.h5t.typewrap (/opt/local/var/macports/build/_opt_mports_dports_python_py-h5py/py27-h5py/work/h5py-2.5.0/h5py/h5t.c:2196) runtimeerror: interface initialization failed (not datatype object) py> import sima traceback (most recent call last): file "<string>", line 1, in <module> file "/users/eflister/library/python/2.7/lib/python/site-packages/sima/__init__.py", line 6, in <module> sima.imaging import imagingdataset file "/users/eflister/library/python/2.7/lib/python/site-packages/sima/imaging.py", line 33, in <module> import sima.misc file "/users/eflister/library/python/2.7/lib/python/site-packages/sima/misc/__init__.py", line 21, in <module> skimage import transform tf file "/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/skimage/transform/__init__.py", line 1, in <module> ._hough_transform import (hough_ellipse, hough_line, file "skimage/transform/_hough_transform.pyx", line 13, in init skimage.transform._hough_transform (skimage/transform/_hough_transform.c:22321) file "/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/skimage/draw/__init__.py", line 2, in <module> .draw3d import ellipsoid, ellipsoid_stats file "/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/skimage/draw/draw3d.py", line 3, in <module> scipy.special import (ellipkinc ellip_f, ellipeinc ellip_e) file "/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/special/__init__.py", line 586, in <module> ._ufuncs import * importerror: dlopen(/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/special/_ufuncs.so, 2): symbol not found: __gfortran_stop_numeric_f08 referenced from: /opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/special/_ufuncs.so expected in: /applications/matlab_r2015a.app/sys/os/maci64/libgfortran.3.dylib in /opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/scipy/special/_ufuncs.so py> import sima traceback (most recent call last): file "<string>", line 1, in <module> file "/users/eflister/library/python/2.7/lib/python/site-packages/sima/__init__.py", line 6, in <module> sima.imaging import imagingdataset file "/users/eflister/library/python/2.7/lib/python/site-packages/sima/imaging.py", line 33, in <module> import sima.misc file "/users/eflister/library/python/2.7/lib/python/site-packages/sima/misc/__init__.py", line 21, in <module> skimage import transform tf file "/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/skimage/transform/__init__.py", line 1, in <module> ._hough_transform import (hough_ellipse, hough_line, importerror: cannot import name hough_ellipse py> import sima traceback (most recent call last): file "<string>", line 1, in <module> file "/users/eflister/library/python/2.7/lib/python/site-packages/sima/__init__.py", line 6, in <module> sima.imaging import imagingdataset file "/users/eflister/library/python/2.7/lib/python/site-packages/sima/imaging.py", line 33, in <module> import sima.misc file "/users/eflister/library/python/2.7/lib/python/site-packages/sima/misc/__init__.py", line 21, in <module> skimage import transform tf file "/opt/local/library/frameworks/python.framework/versions/2.7/lib/python2.7/site-packages/skimage/transform/__init__.py", line 1, in <module> ._hough_transform import (hough_ellipse, hough_line, importerror: cannot import name hough_ellipse py> import picos.tools py> print picos.tools.available_solvers() ['cvxopt', 'mosek7']
i'm starting think wormholing separate process sounds good...
but using ld_preload
start matlab updated libgfortran , libtiff?
the versions want located:
/opt/local/lib/libgcc/libgfortran.3.dylib /opt/local/lib/libtiff.5.dylib
from within fresh matlab session, following didn't help.
>> setenv('dyld_library_path',['/opt/local/lib:' getenv('dyld_library_path')]) >> getenv('dyld_library_path') ans = /opt/local/lib:/applications/matlab_r2015a.app/sys/os/maci64:/applications/matlab_r2015a.app/bin/maci64/../../contents/macos:/applications/matlab_r2015a.app/bin/maci64:/applications/matlab_r2015a.app/extern/lib/maci64:/applications/matlab_r2015a.app/runtime/maci64:/applications/matlab_r2015a.app/sys/java/jre/maci64/jre/lib/./native_threads:/applications/matlab_r2015a.app/sys/java/jre/maci64/jre/lib/./server:/applications/matlab_r2015a.app/sys/java/jre/maci64/jre/lib/./lib/jli
but!!!
~$ dyld_insert_libraries=/opt/local/lib/libgcc/libgfortran.3.dylib:/opt/local/lib/libtiff.5.dylib /applications/matlab_r2015a.app/bin/matlab
solves import problems!!!
>> import py.sima error using import import argument 'py.sima' cannot found or cannot imported. >> import py.sima.sequence % succeeds! >> import py.sima.imagingdataset % succeeds! >> x = py.sima.imagingdataset([1,2],'~') python error: imagingdataset objects must initialized list of sequences. >> x = py.numpy.random.random([2,3,4]) x = python ndarray properties: t: [1x1 py.numpy.ndarray] base: [1x1 py.nonetype] ctypes: [1x1 py.numpy.core._internal._ctypes] data: [1x192 py.buffer] dtype: [1x1 py.numpy.dtype] flags: [1x1 py.numpy.flagsobj] flat: [1x1 py.numpy.flatiter] imag: [1x1 py.numpy.ndarray] itemsize: 8 nbytes: 192 ndim: 3 real: [1x1 py.numpy.ndarray] shape: [1x3 py.tuple] size: 24 strides: [1x3 py.tuple] [[[ 0.4158531 0.18912596 0.20743597 0.92631168] [ 0.0371785 0.48093953 0.88221637 0.85687334] [ 0.2267605 0.79464779 0.97438662 0.47791076]] [[ 0.05602249 0.06596678 0.05691491 0.02706325] [ 0.28477145 0.74781928 0.56700236 0.14500885] [ 0.87999554 0.78932748 0.24473039 0.18383564]]] >> x = py.sima.sequence.create('ndarray',x) class "py.sima.sequence" undefined. perhaps java not running. >> py.sima.segment.stica() ans = python stica no properties. <sima.segment.stica.stica object @ 0x138e15890> >> py.sima.segment.planeca1pc() ans = python planeca1pc no properties. <sima.segment.ca1pc.planeca1pc object @ 0x138e158d0>
we close. why can't sima.sequence.create()
run!??!
a: matlab has set of explicit limits support / not
support in python
code & classes
while both wish & work together, recognised, matlab
not support python
without limits.
matlab has explicitly listed features, not support. 1 of them support object-names starting underscore character.
many of error messages, have posted, confirm fact.
more on un-supported features can checked in >>> limitations python support
going through list shows, how immense budget pay in case re-engineer / re-design packages, non-conform these un-supported features.
what this?
if indeed heavily dependent on dual-world matlab/python, might become interested architecture of how make things work.
try integrate process-to-process messaging via zeromq
et al, , start using distributed processing, using native ( working ) modules on each side.
would faster trial/error on imports, never fly.
Comments
Post a Comment