这个问题涉及Matlab 2014b,Python 3.4和Mac OS 10.10。
我有以下Python文件tmp.py
:
from statsmodels.tsa.arima_process import ArmaProcess
import numpy as np
def generate_AR_time_series():
arparams = np.array([-0.8])
maparams = np.array([])
ar = np.r_[1, -arparams]
ma = np.r_[1, maparams]
arma_process = ArmaProcess(ar, ma)
return arma_process.generate_sample(100)
我想从Matlab调用generate_AR_time_series,所以我使用了:
py.tmp.generate_AR_time_series()
给出了一个模糊的错误消息
Undefined variable "py" or class "py.tmp.generate_AR_time_series".
为了进一步研究这个问题,我尝试了
tmp = py.eval('__import__(''tmp'')', struct);
which gave me a detailed but still obscured error message:
Python Error:
dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scipy/special/_ufuncs.so, 2): Symbol
not found: __gfortran_stop_numeric_f08
Referenced from: /opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scipy/special/_ufuncs.so
Expected in: /Applications/MATLAB_R2014b.app/sys/os/maci64/libgfortran.3.dylib
in /opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scipy/special/_ufuncs.so
我可以在Python中调用该函数,所以我猜问题是Matlab。从详细消息来看,似乎问题在于Matlab安装路径中的预期,但当然Matlab安装路径不包含那些东西,因为它们是Python的第三方库。
如何解决这个问题?
修改1 :
libgfortran.3.dylib
可以在很多地方找到:
/Applications/MATLAB_R2014a.app/sys/os/maci64/libgfortran.3.dylib
/Applications/MATLAB_R2014b.app/sys/os/maci64/libgfortran.3.dylib
/opt/local/lib/gcc48/libgfortran.3.dylib
/opt/local/lib/gcc49/libgfortran.3.dylib
/opt/local/lib/libgcc/libgfortran.3.dylib
/Users/wdg/Documents/MATLAB/mcode/nativelibs/macosx/bin/libgfortran.3.dylib
答案 0 :(得分:1)
尝试:
setenv('DYLD_LIBRARY_PATH', '/usr/local/bin/');
答案 1 :(得分:0)
对我来说,在MATLAB中使用setenv
方法不起作用。此外,MATLAB在启动期间修改DYLD_LIBRARY_PATH
变量以包含必要的库。
首先,您必须确保链接了gfortran
scipy
的哪个版本:在Terminal.app中,输入otool -L /opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scipy/special/_ufuncs.so
并在其中查找“libgfortran
”输出
我可以将$(MATLABROOT)/bin/.matlab7rc.sh
复制到我的主目录,并将LDPATH_PREFIX=''
部分(我的情况下为第195行)中的行mac
更改为LDPATH_PREFIX='/opt/local/lib/gcc49'
,或者您在上面找到libgfortran
的任何路径。
这可确保在MATLAB版本之前找到/opt/local/lib/gcc49/libgfortran.3.dylib
,但保留其他路径。