在Windows上安装pymatbridge

3 投票
3 回答
1631 浏览
提问于 2025-04-18 06:53

在pymatbridge的0.3版本中,增加了一个新的依赖项,就是ZMQ。为了安装这个版本,你可能需要编译一个叫做messenger的mex扩展,并且这个扩展需要链接一个zeromq的dll文件。不过,这在某些情况下会变得相当困难。

有没有人能分享一下在Windows系统上从源代码安装pymatbridge成功的例子呢?

3 个回答

3

我使用Visual Studio作为我的标准开发工具,经过一些调整,终于搞定了构建过程。

VS 2013
Matlab 2013b x64
Python 3.3 x64
ZeroMQ 4.0.4.

如果你使用不同的版本,请确保在必要的地方调整路径。

在Visual Studio(2013)中构建 messenger

  • 首先创建一个新的解决方案,里面放一个空的C++项目。
  • 设置配置,比如选择x64和Release模式。
  • 打开项目属性,设置以下内容:

配置属性 -> 常规:

目标名称: messenger

目标扩展名: .mexw64

配置类型: 动态库 (.dll)

配置属性 -> VC++ 目录 -> 包含目录:

MATLAB路径\extern\include

ZEROMQ路径\include

配置属性 -> VC++ 目录 -> 库目录:

MATLAB路径\extern\lib\win64\microsoft

ZEROMQ路径\lib

配置属性 -> 链接器 -> 输入 -> 额外依赖项:

libmx.lib; libmex.lib; libmat.lib; libzmq-v120-mt-4_0_4.dll

配置属性 -> 链接器 -> 命令行 -> 额外选项:

/export:mexFunction

  • messenger.c 添加为源文件
  • 构建库
  • 将其复制到: PYTHONPATH\Lib\site-packages\pymatbridge\matlab\

请注意:

我遇到了一些不兼容的错误,原因是函数名与windows.h中已有的函数名冲突。解决办法是重命名:

  • initialize
  • listen
  • respond
  • cleanup

改为:

  • initializeMat
  • listenMat
  • respondMat
  • cleanupMat
4

这是我的设置和构建说明,抱歉有点啰嗦——这些内容来自我为实验室笔记写的记录。

规格:

Windows 8.1 (64 bit)
Anaconda 1.9.1
python 2.7.6
MinGW
TDM GCC 4.8.1

首先,我安装了 MS Visual C++ & SDK 7.1。安装失败的一个可能原因是电脑上已经有其他版本的 Visual C++ 编译器和/或 SDK。在成功安装 SDK 7.1 之前,我不得不卸载掉好几个其他版本。

接下来,我使用 Windows SDK 7.1 Command Prompt,我

mex -setup

并选择了新安装的编译器。在我的情况下

Select a compiler:
[1] Microsoft Software Development Kit (SDK) 7.1 in 
C:\Program Files (x86)\Microsoft Visual Studio 10.0

[0] None

Compiler:

我选择了编号 1

然后我下载并安装了一个预编译的 64 位 ZMQ 3.2.4,从 ZMQ 3.2.4 的安装位置 C:\Program Files\ZeroMQ 3.2.4\lib,我把 libzmq-v90-mt_3_2_4.liblibzmq-v90-mt_3_2_4.dllC:\Program Files\ZeroMQ 3.2.4\bin 复制到了消息构建目录 ~\python-matlab-bridge\messenger\src。我还把 zmq.hzmq_utils.h 放到了那个目录,但现在不太确定它们是否真的必要。

然后,在 Windows SDK 7.1 Command Prompt 中,我进入了 messenger\src 目录,并输入了

mex messenger.c libzmq-v90-mt-3_2_4.lib -O -output messenger

以获得一个 messenger.mexw64

最后,在 ~\python-matlab-bridge 目录中,我使用 MinGW,我只需

python setup.py install

这会自动将构建好的包放入我的 Anaconda\Lib\site-packages 中,并附带一个 egg 信息。在 Anaconda\Lib\site-packages\pymatbridge\matlab 中,有之前构建的 messenger.mexw64,它来自 ~\python-matlab-bridge\messenger\src。我还把所有其他的 .dll.lib.h 文件复制到了 Anaconda\Lib\site-packages\pymatbridge\matlab,以防万一。

现在在 iPython 2.7 console 或者 iPython Notebook 中,我可以

%load_ext pymatbridge

成功运行。

1

有些其他的回答有点过时了,现在这个事情可以更简单地完成(不过在Linux系统上还是不太容易 :/)。首先,pymatbridge现在在Windows上包含了一个二进制的mex文件,它已经和libzmq静态链接了,所以你实际上不需要编译任何东西就能让它工作。

不过,如果你还是想从源代码编译,过程对于动态链接库来说也不是太复杂。

1) 从网站上安装zeromq:http://zeromq.org/distro:microsoft-windows

2) 在ZeroMQ安装目录中,把一个lib/libzmq-*.lib文件重命名为libzmq.lib。

3) 把ZeroMQ的bin目录添加到你的系统路径中。

4) 编辑messenger/mexw64/local.cfg文件,指向zeromq的安装目录(你需要更新ZMQ_INC和ZMQ_LIB两个部分)。同时确保MATLAB的目录是正确的。

5) 在messenger目录下运行make.py matlab。这应该会生成messenger.mexw64。

静态链接库在实际操作中比较简单,但因为zeromq(截至目前)没有提供用于Windows安装的静态链接.lib文件,所以你需要自己编译这个文件。得到静态的.lib文件后,用make matlab --static来构建messenger.mexw64。

撰写回答