在Windows 7x64上从Python3.x调用Matlab2013

2 投票
1 回答
1060 浏览
提问于 2025-04-18 00:49

任务:在Windows 7(64位)上使用Python 3.x调用Matlab 2013b中的一个函数。

问题:有没有Python的包可以让我做到这一点?

我已经尝试过:

  • mlabwrap
  • python-matlab-bridge
  • pymatlab

但是这些都无法在上述配置下工作。

如果有关于使用Python 3.x的有效配置的信息,我将非常感激。

如果你需要更详细的信息,请告诉我。


更新:我目前正在尝试使用Matlab 2011b和Python 2.7,因为这似乎是最常用的版本。目前我遇到的问题是:

python-matlab-bridge 我可以毫无问题地导入这个模块,但一旦我开始一个会话,就会弹出一个Matlab命令窗口,之后什么也不发生。Python窗口显示:

Starting MATLAB on ZMQ socket tcp://127.0.0.1:55555
Send 'exit' command to kill the server
............................................................Matlab session timed
 out after 60 seconds
MATLAB failed to start
Press any key to continue . . .

每次都是这样,没有任何错误提示。

mlabwrap 我尝试按照这个指南安装mlabwrap。在输入'python setup.py install'时,弹出一个Matlab命令窗口,结果又什么都没发生。如果我关闭命令窗口,Python输出显示:

WINDOWS SPECIFIC ISSUE? Unable to remove c:\users\martin\appdata\local\temp\tmp1
y2kdk; please delete it manually
[Error 32] Der Prozess kann nicht auf die Datei zugreifen, da sie von einem ande
ren Prozess verwendet wird: 'c:\\users\\martin\\appdata\\local\\temp\\tmp1y2kdk'


INSTALL ABORT: 'matlab -nodesktop -nosplash -wait -r "fid = fopen(\'c:\\users\\m
artin\\appdata\\local\\temp\\tmp1y2kdk\', \'wt\');fprintf(fid, \'%s%c%s%c%s%c\',
 version, 10, matlabroot, 10, computer, 10);fclose(fid); quit"' RETURNED ERROR C
ODE -805306369
PLEASE MAKE SURE matlab IS IN YOUR PATH!

我的%Path%看起来是这样的(只显示重要部分;):

D:\MATLAB\R2011b\bin;C:\Program Files\ZeroMQ 4.0.4\lib;D:\Python27;D:\Python27\scripts;D:\MATLAB\R2011b\runtime\win64;D:\MATLAB\R2011b\extern\lib\win64\microsoft;D:\MATLAB\R2011b\bin\win64

任何帮助我在Windows上建立Matlab和Python之间连接的信息都非常感谢!我真的看不出为什么这些都不工作...


更新2:我现在可以安装mlabwrap了,但我无法启动它。 当我尝试导入mlabwrap时,会弹出一个Matlab命令窗口,并在一分钟后关闭。 Python输出是:

>>> import mlabwrap
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Python27\lib\site-packages\mlabwrap.py", line 645, in <module>
    mlab = MlabWrap()
  File "D:\Python27\lib\site-packages\mlabwrap.py", line 405, in __init__
    self._session = mlabraw.open(os.getenv("MLABRAW_CMD_STR", ""))
mlabraw.error: Unable to start MATLAB(TM) engine

我已经仔细检查过Matlab中的engdemo是可以工作的。

1 个回答

1

我现在已经成功使用了 python-matlab-bridge。我手动把它转换成了Python3,并且这些改动已经合并到官方的代码库里,所以现在应该可以直接使用了。

如果你遇到“messenger init”找不到的错误,确保 Lib\site-packages\pymatbridge\matlab 在你的 PATH 环境变量中。

如果你有任何问题或者想补充的信息,欢迎在这个回答下评论,我会把它添加进去,帮助大家更好地使用python-matlab-bridge。

撰写回答