README

简介

MaToPy (读作 Mai To Pai) 是一个将 matlab 代码编译为 python 代码的编译器和函数库,由北京塔尔旺科技有限公司开发,目前已经成功应用到多个实际项目中。 MaToPymatopy-compilermatopy-lib 两部分组成。

matopy-compiler 的主要功能是将 matlab 代码翻译成 python 代码。因为 matlab 和基于 numpy 的 python 代码之间,尽管有很多相似之处,但也存在诸多的差异。 这使得人工将matlab代码翻译为python代码的工作量变得很大,对于几十个matlab源文件、几百上千行的实际项目,手工翻译的方法将无法应付。 为解决此问题,matopy 通过计算机编译原理技术,通过读取 matlab 代码、进行词法分析语法分析,最终将其编译为人类可读、可用的python代码。 MaToPy 产品的特点是翻译得到的 python代码matlab代码 极为相似,稍作调整、调试后就可以运行。 因为代码相似度极高,便于后期matlab代码升级后对python代码做相应的升级、维护。

同时 MaToPy 的 matopy-lib 提供了 matlab 常用函数的python版本实现,语法与 matlab 函数一模一样, 可以让 matlab 开发者在 python 环境中用 matlab 的编程习惯进行开发,同时也让转译后的 python 代码与 matlab 保持了高度一致,可维护性大大加强。

因为 matlab 函数众多,我们目前也只是实现了项目所需的常用函数,其他函数的实现需要定制开发、逐步积累。

感谢您的关注,如果对 MaToPy 产品感兴趣,请与我们联系,邮箱是 contact@telecwin.com,微信号是 ipandabot (加微信时请注明’咨询MaToPy’)。

用 docker 安装

如果您熟悉 docker 的使用,或者用手动安装方式不成功,那么推荐使用 docker 安装 MaToPy 并使用。

具体方法请参考 用 docker 使用 MaToPy

用 wheel 文件安装

matopy 分为两部分,分别是编译器 matopy-compiler 和运行库 matopy-lib

MaToPy 支持的 Python 版本是 3.8,只要是 Python 3.8 及以上版本即可,目前开发、测试用的是 Python 3.8.16。

请用 Anaconda 创建一个 Python3.8 的虚拟环境,然后用 pip 安装编译器(matopy-compiler)和库函数(matopy-lib)。

# 安装 python 3.8 虚拟环境
conda create -n py38 python=3.8

# 激活虚拟环境,为安装 matopy-compiler 和 matopy-lib 做好准备
activate py38

安装 matopy-compiler 和 matopy-lib:

  1. 下载编译器 wheel 文件,例如 matopy_compiler-0.49-py3-none-any.whl,需要向技术支持人员索取或从官网下载。

  2. 安装新的 matopy-compiler 和 matopy-lib:

    pip install matopy_compiler-0.50-py3-none-any.whl -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
    pip install matopy_lib-0.50-py3-none-any.whl -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
    
  3. 测试编译器,可以用下面的命令行进行编译器测试,将目录 test/ 下的 .m 文件编译为 python 代码,文件使用 GBK 编码而不是utf8,可以这样做:

    matopy -g test\*.m -e gbk -d test\ -N -v
    
  4. 输入注册码,如果之前没有注册过软件,会提示输入注册码,请向技术支持人员索要注册码。

依赖的库

用 pip 安装 matopy-lib 时会自动安装所需依赖包,例如:numpy: 1.23.5 等。

命令行参数

安装了 matopy-compiler 后可以使用``matopy``模块来使用”matopy 编译器”:

(test-matopy) E:\python\projects\matopy>python -m matopy -h
usage:

    matopy [OPTIONS] [FILE1.m FILE2.m ...]

matopy is a Matlab to Python compiler, it takes MATLAB
files and translates them to Python.  The names of the resulting files
are derived from the names of the source files unless explicitly set
with -o .

positional arguments:
  file.m

optional arguments:
  -h, --help            show this help message and exit
  -e ENCODING, --encoding ENCODING

                        File encoding, for example -e GBK. Default is 'utf-8'.
  -C, --no-comments
                        discard multiline comments
  -D DEBUG, --debug DEBUG

                        Colon-separated codes.
                        M Main
                        L Lex
                        P Parse
  -E, --delete-on-error

                        By default, broken ".py" files are kept alive to allow their
                        examination and debugging. Sometimes we want the opposite behavior
  -g PATTERN, --glob-pattern PATTERN

                        Apply unix glob pattern to the input file list or to files. For
                        example -g 'octave-4.0.2/*.m'
  -H, --no-header
                        use it if you plan to concatenate the generated files
  -L, --debug-lexer
                        enable built-in debugging tools
  -N, --no-numbers
                        discard line-numbering information
  -o FILE.py, --output FILE.py

                        Write the results to FILE.py.  Use -o- to send the results to the
                        standard output.  If not specified explicitly, output file names are
                        derived from input file names by replacing ".m" with ".py".  For example,

                            $ matopy FILE1.m FILE2.m FILE3.m

                        generates files FILE1.py FILE2.py and FILE3.py
  -d OUTPUT_DIR, --output-directory OUTPUT_DIR

                        Write the results to directory. If not specified explicitly, output file names are
                        derived from input file names by replacing ".m" with ".py".  For example,

                            $ matopy -d output/

                        generates files output/FILE1.py output/FILE2.py and output/FILE3.py
  -P, --debug-parser
                        enable built-in debugging tools
  -S, --strict
                        stop after first syntax error (by default compiles other .m files)
  -T, --testing-mode
                        support special "testing" percent-bang comments used to write Octave
                        test suite.  When disabled, behaves like regular comments
  -x FILE1.m,FILE2.m,FILE3.m, --exclude FILE1.m,FILE2.m,FILE3.m

                        comma-separated list of files to ignore
  -V, --version         show program's version number and exit
  -v, --verbose

Example:
    $ python -m matopy -g test/*.m -e gbk -d test/ -N -v

例如要将目录 c:\matlab 中的 matlab 代码转换为 python 代码并写入 c:\python 目录,文件使用 GBK 编码而不是utf8,可以这样做:

python -m matopy -v -N -e gbk -g "c:\matlab\*.m" -d "c:\python"

开发 matopy

为开发 matopy 需要先安装一些必要的依赖python库,方法执行下面语句:

# 激活你的 anaconda 开发环境 conda activate matopy

# 安装依赖的python库 pip install -r requirements.txt

版权

Copyright (C) 2024 北京塔尔旺科技有限公司

版权所有:2024 北京塔尔旺科技有限公司 All Rights Reserved