☰
电脑上写的 Manim 代码,搬到鸿蒙上能跑吗?一份兼容清单
2026/10/29 3:03:14 网站建设 项目流程

2026 年 10 月更新,基于 Manim Community Edition 0.21.0

大部分能跑。华为应用市场上的「Manim教程」App 内置的是 Manim 社区版 0.21.0,和pip install manim==0.21.0装出来的是同一个版本,Scene、MathTex、Axes、ValueTracker、ThreeDScene这些常用写法都不用改。要改的主要是四类:用了声音的、用了第三方插件的、指定 OpenGL 渲染器的、引用 JPEG 图片的。

这个 App 是我们做的。与其让大家粘进去试了才发现不行,不如把清单列清楚。

先确认你写的是社区版

Manim 有两支:3Blue1Brown 作者自己维护的 ManimGL(from manimlib import *),和社区维护的 Manim Community Edition(from manim import *)。两边的 API 已经差得挺远。App 里跑的是社区版,ManimGL 的代码要先按社区版的写法改过来。

另外,社区版各版本之间也有改动。如果你的代码是照着 0.17、0.18 时期的教程写的,在电脑上用 0.21.0 跑一遍,没问题的话放进 App 基本也没问题。

直接能跑的

类别例子
场景类型Scene、MovingCameraScene、ThreeDScene
基本图形Circle、Square、Polygon、Line、Arrow、Brace、VGroup
动画Create、Write、Transform、FadeIn、TransformMatchingTex、.animate
动态ValueTracker、always_redraw、add_updater
坐标与图像Axes、NumberPlane、axes.plot()、函数图像
文字和公式Text、MarkupText(中英文都行),MathTex、Tex
3D三维坐标轴、Surface、调相机视角
图和树Graph(依赖的 networkx 已经内置)
素材SVGMobject,PNG 格式的ImageMobject
多文件项目里的.py文件互相import,相对路径引用素材
数值计算numpy

代码里写的config.pixel_width、config.frame_rate这类设置会照常生效。也可以不写,在 App 的渲染设置里选画幅、分辨率和帧率。

要改一改的

声音。self.add_sound()目前不支持,会直接报错,不会悄悄把声音丢掉。建议先导出无声视频,配音和配乐放到剪辑软件里做。

第三方插件。manim-voiceover、manim-slides 这类插件没有内置。鸿蒙上的 App 也没法pip install新的包,用到插件的部分要去掉或者自己实现。

OpenGL 渲染器。--renderer=opengl和依赖 OpenGL 的交互窗口不支持,App 用的是 Manim 默认的 Cairo 渲染器。大多数代码本来就是 Cairo 渲染的,不受影响。

JPEG、WebP 图片。ImageMobject目前只认 PNG。手头是 JPG 的话,先转成 PNG 再导入项目。SVG 不受影响。

自定义 LaTeX 模板和宏包。App 不带完整的 LaTeX 发行版,常见的数学公式写法(分式、根号、求和、积分、矩阵、希腊字母、上下标)都能渲染,但\usepackage引的宏包、自定义TexTemplate用不了。中文别写进MathTex里,用Text写中文、MathTex写公式,排在一起就行。电脑上其实也推荐这么写,原因见我们另一篇讲公式的文章。

联网和外部程序。代码里用requests下载素材、用subprocess调别的程序,这些在 App 里都不行。素材请提前导入项目。

特殊文字。彩色 emoji、阿拉伯语这类需要复杂排版的文字不支持。中文排字用的是 App 自己的排版,不是电脑上的 Pango,换行和字距跟电脑上可能有细微差别。

特别长的场景。几分钟长、画面很复杂的场景,建议拆成几个 Scene 分开渲染。这个习惯在电脑上也省时间,每次调用manim render都有一段固定的启动开销,拆得合理、调用次数少,反而快。

一个搬过去的例子

下面这段是电脑上常见的写法,用ValueTracker让抛物线的开口跟着参数 a 变化。原样粘进 App 就能跑:

from manim import * class Parabola(Scene): def construct(self): a = ValueTracker(1) axes = Axes(x_range=[-3, 3, 1], y_range=[-3, 9, 2], x_length=6, y_length=6) curve = always_redraw( lambda: axes.plot(lambda x: a.get_value() * x**2, x_range=[-2, 2], color=BLUE) ) label = always_redraw( lambda: VGroup( MathTex("y="), DecimalNumber(a.get_value(), num_decimal_places=1), MathTex("x^2"), ).arrange(RIGHT, buff=0.1).to_corner(UR) ) self.play(Create(axes), Create(curve)) self.add(label) self.play(a.animate.set_value(2), run_time=2) self.play(a.animate.set_value(0.3), run_time=2) self.play(a.animate.set_value(-0.5), run_time=2) self.wait()

如果原来的代码里有一句self.add_sound("bgm.mp3"),删掉就行;有ImageMobject("photo.jpg"),把图片转成photo.png,代码里的文件名跟着改。

怎么把代码弄进 App

几种方式都可以:直接在编辑器里新建文件粘贴;用系统的文件选择器导入.py和素材文件;或者先从课程里复制一个示例项目,在它的基础上改。项目里有多个 Scene 时,运行前选要渲染哪一个。

渲染出错,日志会显示完整的报错信息,点一下跳到对应行。也可以把报错交给 App 里的 AI 助手,让它改代码、再试着渲染一次。

常见问题

App 里的 Python 是哪个版本?Python 3.13。3.10 以后的写法,比如match、类型标注里的X | Y,都能用。

能装别的 Python 包吗?不能。App 里带了 Manim 和它运行需要的依赖,包括 numpy 和 networkx。

电脑上渲染的视频和 App 里的一样吗?几何图形、颜色、动画节奏是同一套 Manim 代码算出来的。文字排版和公式的实现跟电脑上不完全一样,个别字距、笔画粗细可能有细小差异。「我的 → 工具 → 渲染基准」可以把你设备上渲染的画面和 Mac 上原生 Manim 的结果放在一起比。

ManimGL 的代码能跑吗?不能直接跑,要先改成社区版的写法。


华为应用市场搜「Manim教程」就能找到。官网:mathanime.com

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询