用 docker 使用 MaToPy

MaToPy 也有 docker 镜像了,目前的镜像和tag是:

crpi-079rewyo0p66lj91.cn-beijing.personal.cr.aliyuncs.com/terawin/matopy:v2024-12-16

可以用 docker pull 下载该镜像,或者基于该镜像制作 python 开发环境,以便拥有 MaToPy 依赖包。

准备 docker 环境

如果您使用的是 Windows 系统,请参考 文章1 下载并安装好 Windows 的 docker 环境。

如果您使用的是 Linux 系统,请参考 文章2 安装 docker 环境。

如果您使用的是阿里云,那就参考 文章3,可以快速地安装好 docker 环境。

拉取镜像

用下面的命令拉取镜像到本地,替换其中的 [镜像版本号]

docker pull crpi-079rewyo0p66lj91.cn-beijing.personal.cr.aliyuncs.com/terawin/matopy:[镜像版本号]

例如,当前的镜像版本是 v2024-12-16 那么就是:

docker pull crpi-079rewyo0p66lj91.cn-beijing.personal.cr.aliyuncs.com/terawin/matopy:v2024-12-16

查看拉取到本地的 MaToPy 镜像,获取到镜像ID,后面使用:

docker images
_images/matopy_docker_image.png

启动容器

请用 windows 的 PowerShell 打开一个命令行窗口,然后执行各种 docker 命令。

假设你的 matlab 代码在当前工作目录 ./matlab 下,那么可以用以下命令挂载这个目录到 matopy 容器, 启动 MaToPy 容器,并且进入 bash 命令行。

docker run --name matopy `
    --mount type=bind,src=$pwd/matlab,dst=/app/matlab `
    -w /app/matlab `
    -i `
    -t [镜像ID或镜像名] `
    bash

注意:本地目录一定要用*绝对地址*,例如 matlab 目录是 D:\MyCode\matlab,那么命令行就是:

docker run --name matopy `
    --mount type=bind,src=D:\MyCode\matlab,dst=/app/matlab `
    -w /app/matlab `
    -i `
    -t [镜像ID或镜像名] `
    bash

一个具体的例子:

docker run --name matopy --mount type=bind,src=D:\MyCode\matlab,dst=/app/matlab -w /app/matlab -i -t b66281dea520 bash

其中 -v 表示将本地的 $pwd/matlab 目录挂载为容器的 /app/matlab 目录;

-w 表示容器的工作目录切换到此处,即 /app/matlab

-i 表示进入交互命令行模式。

-t 指定容器的镜像,就是前面获得的 MaToPy 镜像ID,当然也可以使用镜像名加TAG的模式。 这里是因为镜像名太长了,所以用镜像ID,如果你给 MaToPy 的镜像创建一个 TAG 别名,那也是可以的。

执行 MaToPy 编译命令

进入容器的 bash 交互命令行后,就可以将 matlab 代码拷贝到 ./matlab 目录下,并执行编译命令,得到 python 代码。 确保进入了 /app/matlab 目录,然后执行下面的命令。

matopy -g ./*.m -e gbk -d ./ -N -v

如果是第一次执行,需要按提示输入 注册码,如果执行成功,就会像下面这样。

_images/matopy_compiler_output.png

运行编译生成的 python 代码

要运行编译得到的 python 代码,需要在 python 环境中安装 matopy-lib,具体方法请参考 README 中的 wheel 文件安装

也可以基于 MaToPy 的 docker 镜像,创建新的 docker 镜像,进行开发。