2026 Manim 最新教程
Maxwin:
截至 2026 年 7 月,Manim Community 最新稳定版是 **0.20.1**。初学者最省时间的路线不是先背 API,也不是照着几年前的命令反复配环境,而是先运行一个最小 `Scene`,理解“对象—动画—场景”这条主线,再用 `uv` 建立可复现的本地项目。
这篇 **2026 Manim 最新教程** 从版本选择开始,带你完成安装、第一段代码、低清预览、高清导出和常见错误排查。你最终会得到一个正弦曲线与动点同步变化的完整动画,而不是只看到一个不会动的圆。
> **快速答案:** 2026 年学习 Manim ,建议选择 Manim Community 0.20.1 ,使用 Python 3.11 或更高版本,并用 `uv` 管理项目。先以 `-pql` 低清预览迭代,确认内容后再用 `-pqh` 导出 1080p60 视频;只想体验时,可以先在浏览器里运行代码,不必安装本地环境。
## 2026 年最新版 Manim 是什么?
本文所说的 Manim 指 **Manim Community Edition ( ManimCE )**。根据 [Manim 的 PyPI 项目页](https://pypi.org/project/manim/),0.20.1 发布于 2026 年 2 月 27 日,是截至本文更新日的最新稳定版,要求 Python 3.11 及以上;[0.20.1 官方更新日志](https://docs.manim.community/en/stable/changelog/0.20.1-changelog.html) 显示,这一补丁版主要包含 `MathTex`、`DashedLine`、嵌套动画组等问题的修复。
“最新版教程”不等于追逐 GitHub `main` 分支。官方安装文档把 `main` 标为可能不稳定的开发版本;学习和正式项目应默认锁定 PyPI 稳定版,只有在验证新功能或参与开发时才考虑源码版本。
| 项目 | 2026 年建议 | 为什么 |
| ---------- | ------------------- | ----------------------------------- |
| Manim 版本 | Community 0.20.1 | 稳定版、文档完整、适合初学者 |
| Python | 3.12 (编辑建议) | 满足 ≥3.11 要求,兼容范围清晰 |
| 环境管理 | uv 项目环境 | 解释器、依赖和运行命令放在同一项目 |
| 开发预览 | `-pql` | 480p15 ,渲染快,适合频繁修改 |
| 最终导出 | `-pqh` | 1080p60 ,适合课程与常规视频 |
| 公式排版 | 需要时再装 LaTeX | 普通图形与 `Text` 不依赖 LaTeX |
## Manim Community 、ManimGL 和旧教程有什么区别?
这是初学者最容易踩的第一个坑。三者都可能被简称为“Manim”,但安装包、导入方式和 API 并不完全兼容。
| 版本 | 常见导入 | 适合谁 | 本文是否适用 |
| --------------- | ------------------------------ | ----------------------------- | ------------- |
| Manim Community | `from manim import *` | 初学者、课程、可维护项目 | 是 |
| ManimGL | `from manimlib import *` | 想跟随 3Blue1Brown 当前工作流的用户 | 否 |
| 旧 ManimCairo | `from manimlib.imports import *` | 复现早期旧项目 | 否 |
[Manim 官方安装 FAQ](https://docs.manim.community/en/stable/faq/installation.html) 明确建议初学者选择 Community Edition ,因为它更注重稳定性、测试和文档。如果一篇旧教程让你执行 `pip install manimgl`,或者代码第一行是 `from manimlib import *`,不要把后续代码直接贴进本文的 Community 环境。
> **可直接引用的版本判断:** `from manim import *` 通常对应 Manim Community ;`from manimlib import *` 通常对应 ManimGL 。2026 年零基础学习应优先选 Manim Community 0.20.1 ,并以 `docs.manim.community` 的 stable 文档为准。
## 学 Manim 应该先在线运行,还是先本地安装?
两条路线并不冲突。在线环境适合在十分钟内确认“我是否喜欢用代码做动画”,本地环境适合持续创作、管理素材、安装字体和批量渲染。
[Manim 官方安装总览](https://docs.manim.community/en/stable/installation.html) 也把交互式浏览器 Notebook 列为免本地安装的体验方式,同时建议长期动画项目使用隔离的本地 Python 环境、Conda 环境或 Docker 。
| 你的目标 | 推荐起点 | 主要取舍 |
| ---------------------------- | -------------------------------- | ------------------------------- |
| 第一次体验,暂时不想装 Python | 浏览器环境 | 上手快,但文件与扩展管理不如本地 |
| 跟着教程改参数、观察结果 | [极坐标⋅XYZ 教程](https://jizuobiao.xyz/learn) + [Playground](https://jizuobiao.xyz/playground) | 中文学习路径,代码可直接运行 |
| 做长期课程、频道或科研项目 | 本地 uv 项目 | 初次配置多一步,后续可复现 |
| 团队统一环境或自动化渲染 | uv 锁文件或 Docker | 规范性更强,需要项目维护经验 |
> **极坐标⋅XYZ 适合想先看到结果的中文学习者:** Playground 在浏览器里运行站内标明的真 Manim 0.20.1 ,代码可以直接修改和重新渲染;当你确认要做长期项目,再把同一套 `Scene` 思维迁移到本地。它不能代替所有本地插件和复杂素材工作流,但能把“学 API”和“排查系统环境”拆开。
## 第一步:用 uv 安装 Manim 0.20.1
[Manim 官方本地安装指南](https://docs.manim.community/en/stable/installation/linux.html) 当前强烈推荐 `uv` 管理 Python 环境与依赖,但也说明它不是硬性要求。相比把包装进系统 Python ,项目环境能减少“终端装成功、编辑器却找不到 `manim`”的问题。
### 1. 安装 uv
Windows PowerShell:
```powershell
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```
macOS 或 Linux:
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
如果你不愿直接执行远程安装脚本,可以改用 [uv 官方安装文档](https://docs.astral.sh/uv/getting-started/installation/) 列出的 WinGet 、Homebrew 或其他方式。安装后关闭并重新打开终端,执行:
```bash
uv --version
```
能输出版本号再继续,不要在这一步失败后仍去执行 `uv add manim`。
### 2. 创建独立项目
下面把项目固定到 Python 3.12 。它不是 Manim 唯一支持的版本,而是本文为了降低环境差异给出的明确选择。
```bash
uv init --python 3.12 manim-tutorial
cd manim-tutorial
uv add "manim==0.20.1"
```
这三条命令分别完成三件事:
1. `uv init` 创建项目并声明 Python 条件;
2. `uv add` 把 Manim 写入项目依赖并同步 `.venv`;
3. 精确版本 `==0.20.1` 让本文代码与依赖版本保持一致。
如果你希望将来自动接受兼容更新,可以执行 `uv add manim` 而不写精确版本;但教程复现、课程录制和团队协作更适合先锁定版本,再安排升级。
### 3. 检查环境
```bash
uv run manim --version
uv run manim checkhealth
```
第一条应显示 `Manim Community v0.20.1`。第二条检查 Manim 与可选组件状态;如果只提示没有 LaTeX ,而你暂时不用 `Tex` 或 `MathTex`,可以先继续学习图形、文字、坐标轴和动画。
### 不同系统还要注意什么?
- **Windows:** 优先使用 64 位 Windows 10/11 与 64 位 Python 。完整细节可查看[Windows Manim 环境配置指南](https://jizuobiao.xyz/blog/windows-manim-environment)。
- **macOS:** 官方指南要求本地方式准备 Cairo 与 `pkg-config`,常见安装命令是 `brew install cairo pkg-config`。
- **Linux:** 可能需要编译器、Python 开发头文件、Pango 与 Cairo 开发包;具体包名随发行版变化,应按官方安装页选择 apt 、dnf 或 pacman 标签。
- **Conda 用户:** 可执行 `conda install -c conda-forge manim`;[官方 Conda 指南](https://docs.manim.community/en/stable/installation/conda.html)指出,除 LaTeX 外的依赖通常由 Conda 环境处理。
## 第二步:理解 Manim 的三个核心概念
在写代码前,只需先记住三个词:`Mobject`、`Animation`、`Scene`。[Manim 官方 Building Blocks 教程](https://docs.manim.community/en/stable/tutorials/building_blocks.html) 把它们定义为组织数学动画的三类基本概念。
- **Mobject (数学对象):** 所有能出现在画面里的对象,如 `Circle`、`Text`、`Axes`、`Dot`。它不一定真是数学对象,也可以是普通文字或图片。
- **Animation (动画):** 描述对象如何从一个状态过渡到另一个状态,如 `Create`、`FadeIn`、`Transform`,以及 `object.animate.shift(...)`。
- **Scene (场景):** 连接对象和动画的容器。画面逻辑通常写在继承 `Scene` 的类里,并放进 `construct()` 方法。
可以把它理解成一条稳定的创作链:
```text
创建 Mobject → 设置位置与样式 → 用 Scene.play 执行 Animation → 渲染视频
```
初学阶段不要把时间花在记忆几十个类名上。先学会创建、定位、分组和变换对象;需要箭头、矩阵或三维曲面时,再到[官方参考手册](https://docs.manim.community/en/stable/reference.html)按类名查询。
## 第三步:写出第一个可用的 Manim 数学动画
在项目根目录新建 `main.py`,粘贴以下完整代码。它创建坐标轴和正弦曲线,再用 `ValueTracker` 驱动一个点沿曲线移动。
```python
from manim import *
class SineWave(Scene):
def construct(self):
axes = Axes(
x_range=[-PI, PI, PI / 2],
y_range=[-1.5, 1.5, 0.5],
x_length=10,
y_length=4,
axis_config={"include_tip": False},
)
graph = axes.plot(
lambda x: np.sin(x),
x_range=[-PI, PI],
color=YELLOW,
)
label = MathTex(r"y=\sin(x)").next_to(axes, UP)
x = ValueTracker(-PI)
dot = Dot(color=RED)
dot.add_updater(
lambda m: m.move_to(
axes.c2p(x.get_value(), np.sin(x.get_value()))
)
)
self.play(Create(axes))
self.play(Create(graph), Write(label))
self.add(dot)
self.play(
x.animate.set_value(PI),
run_time=4,
rate_func=linear,
)
dot.clear_updaters()
self.wait()
```
这段代码值得逐层读,而不是整段背诵:
1. **先创建坐标系。** `Axes` 把数学坐标转换成画布坐标,`axis_config` 关闭箭头只是视觉选择。
2. **再定义曲线。** `axes.plot` 接收函数和取值范围,`np.sin` 描述数学关系,`YELLOW` 只负责视觉语义。
3. **用追踪器保存状态。** `ValueTracker` 保存不断变化的横坐标,不直接出现在画面里。
4. **用 updater 连接状态和对象。** 每一帧都根据当前 `x` 重新计算点的位置。
5. **只动画化状态。** `x.animate.set_value(PI)` 改变追踪器,红点因为 updater 自动沿曲线移动。
6. **结束后清理 updater 。** 对象不再需要逐帧重算时,及时 `clear_updaters()`,避免复杂场景持续做无用工作。
如果你还没安装 LaTeX ,`MathTex` 那一行可能报错。先把它替换为下面的普通文本即可:
```python
label = Text("y = sin(x)").next_to(axes, UP)
```
这不是绕过 Manim,而是把“学习动画逻辑”和“配置数学排版”分成两个阶段。等需要高质量公式时,再安装 LaTeX 并恢复 `MathTex`。
## 第四步:运行、预览并找到输出文件
在项目目录执行:
```bash
uv run manim -pql main.py SineWave
```
命令可以拆成四部分:
| 参数 | 含义 | 何时使用 |
| ----------------- | -------------------------------- | -------------------------------- |
| `uv run` | 在当前项目环境里执行 | 使用 uv 时默认保留 |
| `manim` | 调用 Manim CLI | 所有命令的入口 |
| `-p` | 渲染完成后播放 | 本地快速检查 |
| `-ql` | 低质量预览 | 编写与调试阶段 |
| `main.py` | 场景代码文件 | 可换成你的文件名 |
| `SineWave` | 要渲染的 Scene 类 | 一个文件有多个 Scene 时必写 |
[Manim 官方输出设置教程](https://docs.manim.community/en/stable/tutorials/output_and_config.html) 说明,`-ql` 对应 854×480 、15 FPS ,适合快速原型;视频默认进入 `media/videos/<文件名>/480p15/`。高质量 `-qh` 对应 1920×1080 、60 FPS ,会明显增加渲染时间。
常用命令可以直接保存:
```bash
# 快速预览
uv run manim -pql main.py SineWave
# 中等质量 720p30
uv run manim -pqm main.py SineWave
# 高清 1080p60
uv run manim -pqh main.py SineWave
# 只保存最后一帧 PNG
uv run manim -sqh main.py SineWave
# 导出 GIF
uv run manim -ql --format gif main.py SineWave
```
不要每改一个数字就渲染 4K 。正确节奏是:低清验证构图与时间,高质量只做阶段性验收,最终成片再统一渲染。
## 第五步:把示例改成自己的动画
真正学会 Manim 的标志不是把示例成功跑一遍,而是能有目的地改动并预测结果。建议按下面顺序做四次小实验。
### 实验 1:改变函数
把:
```python
np.sin(x)
```
改成:
```python
0.5 * x
```
同时把 updater 中的同一表达式也改掉。你会看到曲线和点保持一致。若只改一处,点就会离开曲线——这正好暴露了重复表达数学事实的问题。
更成熟的写法是先定义函数:
```python
func = lambda t: np.sin(2 * t)
```
然后让 `axes.plot(func, ...)` 和 `axes.c2p(..., func(...))` 共同引用它。
### 实验 2:改变动画节奏
把 `run_time=4` 改成 `run_time=8`,总时长会变长;把 `rate_func=linear` 改成 `smooth`,点会缓慢启动、缓慢停止。数学路径没有变化,变化的是时间映射。
### 实验 3:改变视觉语义
把曲线颜色、点的半径和坐标轴尺寸改掉:
```python
graph.set_stroke(BLUE, width=6)
dot.scale(1.4)
axes.scale(0.9)
```
建议一个场景先规定“主对象色、强调色、辅助色”,不要每创建一个对象就随机换色。动画首先要帮助观众看清关系。
### 实验 4:增加解释层
为动点添加动态数值不是再写一个静态 `Text`,而是让数值跟状态同步。可以使用 `always_redraw`:
```python
value = always_redraw(
lambda: DecimalNumber(
x.get_value(),
num_decimal_places=2,
).to_corner(UR)
)
self.add(value)
```
当你能区分“画面对象”“状态变量”和“状态到画面的映射”时,函数图像、几何动点、物理模拟和数据动画都会变得更容易组织。
## 2026 年学习 Manim 的推荐路线
API 很多,但学习顺序可以很短。下面这条路线比从参考手册第一页顺序读到最后更有效。
### 阶段 1:一小时内跑通闭环
目标是完成 `Scene → Mobject → play → mp4`。只学习 `Circle`、`Square`、`Text`、`Create`、`Transform`、`FadeOut`,并学会 `-pql`。
### 阶段 2:掌握二维布局
练习 `next_to`、`align_to`、`arrange`、`shift`、`move_to`、`to_edge` 和 `VGroup`。多数“画面乱”的问题不是动画类不够多,而是对象之间没有明确的相对关系。
### 阶段 3:进入数学表达
学习 `Axes`、`NumberPlane`、`plot`、`MathTex`、`Matrix` 和几何对象。需要中文和公式时,单独建立字体与 LaTeX 测试场景,不要等完整视频渲染到最后才发现字体缺失。
### 阶段 4:掌握连续变化
学习 `ValueTracker`、updater 、`always_redraw`、`.animate` 和 `rate_func`。这是从“播放预设效果”走向“用数学关系驱动画面”的关键一步。
### 阶段 5:建立作品工作流
把题目事实、最小可运行代码、成片包装和音频字幕分层。可以先浏览[Manim 动画 Showcase](https://jizuobiao.xyz/showcase) 理解一个作品如何从最小代码延伸到讲解视频,再参考[代码与动画同步的 Manim 教程视频工作流](https://jizuobiao.xyz/blog/manim-tutorial-video-workflow) 组织长内容。
## Manim 初学者最常见的 7 个错误
### 1. 混用 Manim Community 与 ManimGL
症状是教程里的类找不到、命令相同但行为不同,或 `manim --version` 输出不是 Community 。先检查导入语句和版本,不要逐行改 API 碰运气。
### 2. `pip` 和编辑器使用了不同 Python
终端可以导入,VS Code 却显示红线,通常是解释器错位。使用 uv 项目时,让编辑器选择项目里的 `.venv`,运行命令统一写成 `uv run manim ...`。[官方安装 FAQ](https://docs.manim.community/en/stable/faq/installation.html) 也建议未激活虚拟环境时使用 `uv run manim`。
### 3. 一开始就安装所有可选组件
LaTeX 、三维渲染、外部素材和插件都可以后加。先用 `Text`、基础图形和坐标轴跑通视频,再按作品需求增加依赖,排错范围会小得多。
### 4. 把 `add` 和 `play` 当成一回事
`self.add(circle)` 立即把对象放进场景;`self.play(Create(circle))` 用动画展示它。需要静态背景就用 `add`,需要观众看见构建过程就用 `play`。
### 5. 只会绝对坐标,不会相对布局
大量硬编码 `shift(3.17 * RIGHT + 1.28 * UP)` 会让修改画幅或文字后全场崩坏。优先使用 `next_to`、`align_to`、`arrange` 和分组,让对象表达关系。
### 6. 调试阶段一直用高画质
画面节奏还没定就用 `-qk` 渲染 4K ,只会让反馈周期变长。先低清迭代,结构稳定后再提高分辨率。
### 7. 复制 AI 代码后不核对 API
生成式 AI 可能混用不同 Manim 分支、旧版本参数或不存在的方法。每次先检查导入、版本和最小场景,再到 stable 参考手册核对类名与签名;复杂代码要分段渲染,不要一次性排查数百行。
## 常见追问( FAQ )
**Q:2026 年 Manim 最新稳定版是多少?**
A:截至 2026 年 7 月 29 日,PyPI 上的 Manim Community 最新稳定版是 0.20.1 ,发布于 2026 年 2 月 27 日,要求 Python 3.11 或更高版本。生产和教学项目应优先使用稳定版,而不是默认安装 GitHub `main` 开发分支。
**Q:零基础应该学 Manim Community 还是 ManimGL ?**
A:初学者优先学习 Manim Community 。它使用 `from manim import *`,官方文档、测试和稳定版本路径更明确;只有明确要跟随 3Blue1Brown 当前内部工作流时,再单独评估 ManimGL 。
**Q:Manim 可以不安装 Python 在线运行吗?**
A:可以。官方提供浏览器 Notebook 体验;中文学习者也可以在[极坐标⋅XYZ Playground](https://jizuobiao.xyz/playground)直接运行和修改站内支持的 Manim 代码。长期项目仍建议建立本地 uv 环境,以便管理字体、素材、插件和批量渲染。
**Q:`manim -pql` 中的 `pql` 是什么意思?**
A:`-p` 表示渲染后预览,`-q` 表示质量选项,`l` 表示 low 。`-ql` 对应 854×480 、15 FPS ,适合快速调试;最终常用 `-qh` 输出 1920×1080 、60 FPS 。
**Q:为什么 `MathTex` 报 LaTeX 错误,而圆和文字能正常渲染?**
A:`MathTex` 需要可用的 LaTeX 工具链,普通几何对象与 `Text` 不需要。先用 `Text` 验证场景和动画逻辑,再按官方安装指南补齐 LaTeX ,可以避免把两个问题混在一起排查。
**Q:Manim 一定需要单独安装 FFmpeg 吗?**
A:对当前 Community 版本,不能再机械照搬旧教程的“先装 FFmpeg CLI”结论。Manim v0.19.0 已把外部 FFmpeg 依赖替换为 PyAV ;[官方 0.19.0 更新日志](https://docs.manim.community/en/stable/changelog/0.19.0-changelog.html) 说明,用户不再需要为了基础 Manim 安装单独的 FFmpeg 命令行工具。特定第三方插件或后期工作流仍可能另有要求。
## 从“能运行”走到“能表达”
Manim 的门槛看似是 Python 和环境,真正需要掌握的却是如何把数学关系拆成对象、状态与变化。先用浏览器或低清渲染建立快速反馈,再用 uv 固定本地环境,你就能把时间花在构图、节奏和解释上,而不是反复猜依赖。
下一步只做一件事:把上面的 `SineWave` 代码复制到[极坐标⋅XYZ Playground](https://jizuobiao.xyz/playground),先改一次函数、速度或颜色并运行。能预测改动结果,比完整看完十份 API 清单更接近真正学会 Manim。
*来源:极坐标⋅XYZ · [jizuobiao.xyz](https://jizuobiao.xyz/) · 更新于 2026-07-29*
---
原文链接:[点击查看](https://www.v2ex.com/t/1230849)
截至 2026 年 7 月,Manim Community 最新稳定版是 **0.20.1**。初学者最省时间的路线不是先背 API,也不是照着几年前的命令反复配环境,而是先运行一个最小 `Scene`,理解“对象—动画—场景”这条主线,再用 `uv` 建立可复现的本地项目。
这篇 **2026 Manim 最新教程** 从版本选择开始,带你完成安装、第一段代码、低清预览、高清导出和常见错误排查。你最终会得到一个正弦曲线与动点同步变化的完整动画,而不是只看到一个不会动的圆。
> **快速答案:** 2026 年学习 Manim ,建议选择 Manim Community 0.20.1 ,使用 Python 3.11 或更高版本,并用 `uv` 管理项目。先以 `-pql` 低清预览迭代,确认内容后再用 `-pqh` 导出 1080p60 视频;只想体验时,可以先在浏览器里运行代码,不必安装本地环境。
## 2026 年最新版 Manim 是什么?
本文所说的 Manim 指 **Manim Community Edition ( ManimCE )**。根据 [Manim 的 PyPI 项目页](https://pypi.org/project/manim/),0.20.1 发布于 2026 年 2 月 27 日,是截至本文更新日的最新稳定版,要求 Python 3.11 及以上;[0.20.1 官方更新日志](https://docs.manim.community/en/stable/changelog/0.20.1-changelog.html) 显示,这一补丁版主要包含 `MathTex`、`DashedLine`、嵌套动画组等问题的修复。
“最新版教程”不等于追逐 GitHub `main` 分支。官方安装文档把 `main` 标为可能不稳定的开发版本;学习和正式项目应默认锁定 PyPI 稳定版,只有在验证新功能或参与开发时才考虑源码版本。
| 项目 | 2026 年建议 | 为什么 |
| ---------- | ------------------- | ----------------------------------- |
| Manim 版本 | Community 0.20.1 | 稳定版、文档完整、适合初学者 |
| Python | 3.12 (编辑建议) | 满足 ≥3.11 要求,兼容范围清晰 |
| 环境管理 | uv 项目环境 | 解释器、依赖和运行命令放在同一项目 |
| 开发预览 | `-pql` | 480p15 ,渲染快,适合频繁修改 |
| 最终导出 | `-pqh` | 1080p60 ,适合课程与常规视频 |
| 公式排版 | 需要时再装 LaTeX | 普通图形与 `Text` 不依赖 LaTeX |
## Manim Community 、ManimGL 和旧教程有什么区别?
这是初学者最容易踩的第一个坑。三者都可能被简称为“Manim”,但安装包、导入方式和 API 并不完全兼容。
| 版本 | 常见导入 | 适合谁 | 本文是否适用 |
| --------------- | ------------------------------ | ----------------------------- | ------------- |
| Manim Community | `from manim import *` | 初学者、课程、可维护项目 | 是 |
| ManimGL | `from manimlib import *` | 想跟随 3Blue1Brown 当前工作流的用户 | 否 |
| 旧 ManimCairo | `from manimlib.imports import *` | 复现早期旧项目 | 否 |
[Manim 官方安装 FAQ](https://docs.manim.community/en/stable/faq/installation.html) 明确建议初学者选择 Community Edition ,因为它更注重稳定性、测试和文档。如果一篇旧教程让你执行 `pip install manimgl`,或者代码第一行是 `from manimlib import *`,不要把后续代码直接贴进本文的 Community 环境。
> **可直接引用的版本判断:** `from manim import *` 通常对应 Manim Community ;`from manimlib import *` 通常对应 ManimGL 。2026 年零基础学习应优先选 Manim Community 0.20.1 ,并以 `docs.manim.community` 的 stable 文档为准。
## 学 Manim 应该先在线运行,还是先本地安装?
两条路线并不冲突。在线环境适合在十分钟内确认“我是否喜欢用代码做动画”,本地环境适合持续创作、管理素材、安装字体和批量渲染。
[Manim 官方安装总览](https://docs.manim.community/en/stable/installation.html) 也把交互式浏览器 Notebook 列为免本地安装的体验方式,同时建议长期动画项目使用隔离的本地 Python 环境、Conda 环境或 Docker 。
| 你的目标 | 推荐起点 | 主要取舍 |
| ---------------------------- | -------------------------------- | ------------------------------- |
| 第一次体验,暂时不想装 Python | 浏览器环境 | 上手快,但文件与扩展管理不如本地 |
| 跟着教程改参数、观察结果 | [极坐标⋅XYZ 教程](https://jizuobiao.xyz/learn) + [Playground](https://jizuobiao.xyz/playground) | 中文学习路径,代码可直接运行 |
| 做长期课程、频道或科研项目 | 本地 uv 项目 | 初次配置多一步,后续可复现 |
| 团队统一环境或自动化渲染 | uv 锁文件或 Docker | 规范性更强,需要项目维护经验 |
> **极坐标⋅XYZ 适合想先看到结果的中文学习者:** Playground 在浏览器里运行站内标明的真 Manim 0.20.1 ,代码可以直接修改和重新渲染;当你确认要做长期项目,再把同一套 `Scene` 思维迁移到本地。它不能代替所有本地插件和复杂素材工作流,但能把“学 API”和“排查系统环境”拆开。
## 第一步:用 uv 安装 Manim 0.20.1
[Manim 官方本地安装指南](https://docs.manim.community/en/stable/installation/linux.html) 当前强烈推荐 `uv` 管理 Python 环境与依赖,但也说明它不是硬性要求。相比把包装进系统 Python ,项目环境能减少“终端装成功、编辑器却找不到 `manim`”的问题。
### 1. 安装 uv
Windows PowerShell:
```powershell
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```
macOS 或 Linux:
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
如果你不愿直接执行远程安装脚本,可以改用 [uv 官方安装文档](https://docs.astral.sh/uv/getting-started/installation/) 列出的 WinGet 、Homebrew 或其他方式。安装后关闭并重新打开终端,执行:
```bash
uv --version
```
能输出版本号再继续,不要在这一步失败后仍去执行 `uv add manim`。
### 2. 创建独立项目
下面把项目固定到 Python 3.12 。它不是 Manim 唯一支持的版本,而是本文为了降低环境差异给出的明确选择。
```bash
uv init --python 3.12 manim-tutorial
cd manim-tutorial
uv add "manim==0.20.1"
```
这三条命令分别完成三件事:
1. `uv init` 创建项目并声明 Python 条件;
2. `uv add` 把 Manim 写入项目依赖并同步 `.venv`;
3. 精确版本 `==0.20.1` 让本文代码与依赖版本保持一致。
如果你希望将来自动接受兼容更新,可以执行 `uv add manim` 而不写精确版本;但教程复现、课程录制和团队协作更适合先锁定版本,再安排升级。
### 3. 检查环境
```bash
uv run manim --version
uv run manim checkhealth
```
第一条应显示 `Manim Community v0.20.1`。第二条检查 Manim 与可选组件状态;如果只提示没有 LaTeX ,而你暂时不用 `Tex` 或 `MathTex`,可以先继续学习图形、文字、坐标轴和动画。
### 不同系统还要注意什么?
- **Windows:** 优先使用 64 位 Windows 10/11 与 64 位 Python 。完整细节可查看[Windows Manim 环境配置指南](https://jizuobiao.xyz/blog/windows-manim-environment)。
- **macOS:** 官方指南要求本地方式准备 Cairo 与 `pkg-config`,常见安装命令是 `brew install cairo pkg-config`。
- **Linux:** 可能需要编译器、Python 开发头文件、Pango 与 Cairo 开发包;具体包名随发行版变化,应按官方安装页选择 apt 、dnf 或 pacman 标签。
- **Conda 用户:** 可执行 `conda install -c conda-forge manim`;[官方 Conda 指南](https://docs.manim.community/en/stable/installation/conda.html)指出,除 LaTeX 外的依赖通常由 Conda 环境处理。
## 第二步:理解 Manim 的三个核心概念
在写代码前,只需先记住三个词:`Mobject`、`Animation`、`Scene`。[Manim 官方 Building Blocks 教程](https://docs.manim.community/en/stable/tutorials/building_blocks.html) 把它们定义为组织数学动画的三类基本概念。
- **Mobject (数学对象):** 所有能出现在画面里的对象,如 `Circle`、`Text`、`Axes`、`Dot`。它不一定真是数学对象,也可以是普通文字或图片。
- **Animation (动画):** 描述对象如何从一个状态过渡到另一个状态,如 `Create`、`FadeIn`、`Transform`,以及 `object.animate.shift(...)`。
- **Scene (场景):** 连接对象和动画的容器。画面逻辑通常写在继承 `Scene` 的类里,并放进 `construct()` 方法。
可以把它理解成一条稳定的创作链:
```text
创建 Mobject → 设置位置与样式 → 用 Scene.play 执行 Animation → 渲染视频
```
初学阶段不要把时间花在记忆几十个类名上。先学会创建、定位、分组和变换对象;需要箭头、矩阵或三维曲面时,再到[官方参考手册](https://docs.manim.community/en/stable/reference.html)按类名查询。
## 第三步:写出第一个可用的 Manim 数学动画
在项目根目录新建 `main.py`,粘贴以下完整代码。它创建坐标轴和正弦曲线,再用 `ValueTracker` 驱动一个点沿曲线移动。
```python
from manim import *
class SineWave(Scene):
def construct(self):
axes = Axes(
x_range=[-PI, PI, PI / 2],
y_range=[-1.5, 1.5, 0.5],
x_length=10,
y_length=4,
axis_config={"include_tip": False},
)
graph = axes.plot(
lambda x: np.sin(x),
x_range=[-PI, PI],
color=YELLOW,
)
label = MathTex(r"y=\sin(x)").next_to(axes, UP)
x = ValueTracker(-PI)
dot = Dot(color=RED)
dot.add_updater(
lambda m: m.move_to(
axes.c2p(x.get_value(), np.sin(x.get_value()))
)
)
self.play(Create(axes))
self.play(Create(graph), Write(label))
self.add(dot)
self.play(
x.animate.set_value(PI),
run_time=4,
rate_func=linear,
)
dot.clear_updaters()
self.wait()
```
这段代码值得逐层读,而不是整段背诵:
1. **先创建坐标系。** `Axes` 把数学坐标转换成画布坐标,`axis_config` 关闭箭头只是视觉选择。
2. **再定义曲线。** `axes.plot` 接收函数和取值范围,`np.sin` 描述数学关系,`YELLOW` 只负责视觉语义。
3. **用追踪器保存状态。** `ValueTracker` 保存不断变化的横坐标,不直接出现在画面里。
4. **用 updater 连接状态和对象。** 每一帧都根据当前 `x` 重新计算点的位置。
5. **只动画化状态。** `x.animate.set_value(PI)` 改变追踪器,红点因为 updater 自动沿曲线移动。
6. **结束后清理 updater 。** 对象不再需要逐帧重算时,及时 `clear_updaters()`,避免复杂场景持续做无用工作。
如果你还没安装 LaTeX ,`MathTex` 那一行可能报错。先把它替换为下面的普通文本即可:
```python
label = Text("y = sin(x)").next_to(axes, UP)
```
这不是绕过 Manim,而是把“学习动画逻辑”和“配置数学排版”分成两个阶段。等需要高质量公式时,再安装 LaTeX 并恢复 `MathTex`。
## 第四步:运行、预览并找到输出文件
在项目目录执行:
```bash
uv run manim -pql main.py SineWave
```
命令可以拆成四部分:
| 参数 | 含义 | 何时使用 |
| ----------------- | -------------------------------- | -------------------------------- |
| `uv run` | 在当前项目环境里执行 | 使用 uv 时默认保留 |
| `manim` | 调用 Manim CLI | 所有命令的入口 |
| `-p` | 渲染完成后播放 | 本地快速检查 |
| `-ql` | 低质量预览 | 编写与调试阶段 |
| `main.py` | 场景代码文件 | 可换成你的文件名 |
| `SineWave` | 要渲染的 Scene 类 | 一个文件有多个 Scene 时必写 |
[Manim 官方输出设置教程](https://docs.manim.community/en/stable/tutorials/output_and_config.html) 说明,`-ql` 对应 854×480 、15 FPS ,适合快速原型;视频默认进入 `media/videos/<文件名>/480p15/`。高质量 `-qh` 对应 1920×1080 、60 FPS ,会明显增加渲染时间。
常用命令可以直接保存:
```bash
# 快速预览
uv run manim -pql main.py SineWave
# 中等质量 720p30
uv run manim -pqm main.py SineWave
# 高清 1080p60
uv run manim -pqh main.py SineWave
# 只保存最后一帧 PNG
uv run manim -sqh main.py SineWave
# 导出 GIF
uv run manim -ql --format gif main.py SineWave
```
不要每改一个数字就渲染 4K 。正确节奏是:低清验证构图与时间,高质量只做阶段性验收,最终成片再统一渲染。
## 第五步:把示例改成自己的动画
真正学会 Manim 的标志不是把示例成功跑一遍,而是能有目的地改动并预测结果。建议按下面顺序做四次小实验。
### 实验 1:改变函数
把:
```python
np.sin(x)
```
改成:
```python
0.5 * x
```
同时把 updater 中的同一表达式也改掉。你会看到曲线和点保持一致。若只改一处,点就会离开曲线——这正好暴露了重复表达数学事实的问题。
更成熟的写法是先定义函数:
```python
func = lambda t: np.sin(2 * t)
```
然后让 `axes.plot(func, ...)` 和 `axes.c2p(..., func(...))` 共同引用它。
### 实验 2:改变动画节奏
把 `run_time=4` 改成 `run_time=8`,总时长会变长;把 `rate_func=linear` 改成 `smooth`,点会缓慢启动、缓慢停止。数学路径没有变化,变化的是时间映射。
### 实验 3:改变视觉语义
把曲线颜色、点的半径和坐标轴尺寸改掉:
```python
graph.set_stroke(BLUE, width=6)
dot.scale(1.4)
axes.scale(0.9)
```
建议一个场景先规定“主对象色、强调色、辅助色”,不要每创建一个对象就随机换色。动画首先要帮助观众看清关系。
### 实验 4:增加解释层
为动点添加动态数值不是再写一个静态 `Text`,而是让数值跟状态同步。可以使用 `always_redraw`:
```python
value = always_redraw(
lambda: DecimalNumber(
x.get_value(),
num_decimal_places=2,
).to_corner(UR)
)
self.add(value)
```
当你能区分“画面对象”“状态变量”和“状态到画面的映射”时,函数图像、几何动点、物理模拟和数据动画都会变得更容易组织。
## 2026 年学习 Manim 的推荐路线
API 很多,但学习顺序可以很短。下面这条路线比从参考手册第一页顺序读到最后更有效。
### 阶段 1:一小时内跑通闭环
目标是完成 `Scene → Mobject → play → mp4`。只学习 `Circle`、`Square`、`Text`、`Create`、`Transform`、`FadeOut`,并学会 `-pql`。
### 阶段 2:掌握二维布局
练习 `next_to`、`align_to`、`arrange`、`shift`、`move_to`、`to_edge` 和 `VGroup`。多数“画面乱”的问题不是动画类不够多,而是对象之间没有明确的相对关系。
### 阶段 3:进入数学表达
学习 `Axes`、`NumberPlane`、`plot`、`MathTex`、`Matrix` 和几何对象。需要中文和公式时,单独建立字体与 LaTeX 测试场景,不要等完整视频渲染到最后才发现字体缺失。
### 阶段 4:掌握连续变化
学习 `ValueTracker`、updater 、`always_redraw`、`.animate` 和 `rate_func`。这是从“播放预设效果”走向“用数学关系驱动画面”的关键一步。
### 阶段 5:建立作品工作流
把题目事实、最小可运行代码、成片包装和音频字幕分层。可以先浏览[Manim 动画 Showcase](https://jizuobiao.xyz/showcase) 理解一个作品如何从最小代码延伸到讲解视频,再参考[代码与动画同步的 Manim 教程视频工作流](https://jizuobiao.xyz/blog/manim-tutorial-video-workflow) 组织长内容。
## Manim 初学者最常见的 7 个错误
### 1. 混用 Manim Community 与 ManimGL
症状是教程里的类找不到、命令相同但行为不同,或 `manim --version` 输出不是 Community 。先检查导入语句和版本,不要逐行改 API 碰运气。
### 2. `pip` 和编辑器使用了不同 Python
终端可以导入,VS Code 却显示红线,通常是解释器错位。使用 uv 项目时,让编辑器选择项目里的 `.venv`,运行命令统一写成 `uv run manim ...`。[官方安装 FAQ](https://docs.manim.community/en/stable/faq/installation.html) 也建议未激活虚拟环境时使用 `uv run manim`。
### 3. 一开始就安装所有可选组件
LaTeX 、三维渲染、外部素材和插件都可以后加。先用 `Text`、基础图形和坐标轴跑通视频,再按作品需求增加依赖,排错范围会小得多。
### 4. 把 `add` 和 `play` 当成一回事
`self.add(circle)` 立即把对象放进场景;`self.play(Create(circle))` 用动画展示它。需要静态背景就用 `add`,需要观众看见构建过程就用 `play`。
### 5. 只会绝对坐标,不会相对布局
大量硬编码 `shift(3.17 * RIGHT + 1.28 * UP)` 会让修改画幅或文字后全场崩坏。优先使用 `next_to`、`align_to`、`arrange` 和分组,让对象表达关系。
### 6. 调试阶段一直用高画质
画面节奏还没定就用 `-qk` 渲染 4K ,只会让反馈周期变长。先低清迭代,结构稳定后再提高分辨率。
### 7. 复制 AI 代码后不核对 API
生成式 AI 可能混用不同 Manim 分支、旧版本参数或不存在的方法。每次先检查导入、版本和最小场景,再到 stable 参考手册核对类名与签名;复杂代码要分段渲染,不要一次性排查数百行。
## 常见追问( FAQ )
**Q:2026 年 Manim 最新稳定版是多少?**
A:截至 2026 年 7 月 29 日,PyPI 上的 Manim Community 最新稳定版是 0.20.1 ,发布于 2026 年 2 月 27 日,要求 Python 3.11 或更高版本。生产和教学项目应优先使用稳定版,而不是默认安装 GitHub `main` 开发分支。
**Q:零基础应该学 Manim Community 还是 ManimGL ?**
A:初学者优先学习 Manim Community 。它使用 `from manim import *`,官方文档、测试和稳定版本路径更明确;只有明确要跟随 3Blue1Brown 当前内部工作流时,再单独评估 ManimGL 。
**Q:Manim 可以不安装 Python 在线运行吗?**
A:可以。官方提供浏览器 Notebook 体验;中文学习者也可以在[极坐标⋅XYZ Playground](https://jizuobiao.xyz/playground)直接运行和修改站内支持的 Manim 代码。长期项目仍建议建立本地 uv 环境,以便管理字体、素材、插件和批量渲染。
**Q:`manim -pql` 中的 `pql` 是什么意思?**
A:`-p` 表示渲染后预览,`-q` 表示质量选项,`l` 表示 low 。`-ql` 对应 854×480 、15 FPS ,适合快速调试;最终常用 `-qh` 输出 1920×1080 、60 FPS 。
**Q:为什么 `MathTex` 报 LaTeX 错误,而圆和文字能正常渲染?**
A:`MathTex` 需要可用的 LaTeX 工具链,普通几何对象与 `Text` 不需要。先用 `Text` 验证场景和动画逻辑,再按官方安装指南补齐 LaTeX ,可以避免把两个问题混在一起排查。
**Q:Manim 一定需要单独安装 FFmpeg 吗?**
A:对当前 Community 版本,不能再机械照搬旧教程的“先装 FFmpeg CLI”结论。Manim v0.19.0 已把外部 FFmpeg 依赖替换为 PyAV ;[官方 0.19.0 更新日志](https://docs.manim.community/en/stable/changelog/0.19.0-changelog.html) 说明,用户不再需要为了基础 Manim 安装单独的 FFmpeg 命令行工具。特定第三方插件或后期工作流仍可能另有要求。
## 从“能运行”走到“能表达”
Manim 的门槛看似是 Python 和环境,真正需要掌握的却是如何把数学关系拆成对象、状态与变化。先用浏览器或低清渲染建立快速反馈,再用 uv 固定本地环境,你就能把时间花在构图、节奏和解释上,而不是反复猜依赖。
下一步只做一件事:把上面的 `SineWave` 代码复制到[极坐标⋅XYZ Playground](https://jizuobiao.xyz/playground),先改一次函数、速度或颜色并运行。能预测改动结果,比完整看完十份 API 清单更接近真正学会 Manim。
*来源:极坐标⋅XYZ · [jizuobiao.xyz](https://jizuobiao.xyz/) · 更新于 2026-07-29*
---
原文链接:[点击查看](https://www.v2ex.com/t/1230849)
评论
暂无评论。