Manim with VSCode 配置指南
Manim MK.Ver With VSCode
背景与此指南的特点
近期由于想要实现复变函数的可视化以及有关向量场的渲染,捡起来了许久没用的manim
又搞了一发配置,这里将其相关配置方法给出。
此方法较常规方法,如pip install manimgl
的优势主要有:
- 可以结合使用VSCode进行运行中调试
- 新版本(OpenGL)与老版本(cairo)共存,同时使用互不影响
- 支持代码分析器进行自动补全、定义跳转
- 不改动代码仓库代码,支持随时更新至最新版本
- 配置文件分离且支持自行配置
- 全部项目和仓库文件均存放在同一文件夹下,便于管理
- 任意子文件夹中的代码文件均可直接渲染,无需关注路径配置
- 利用VSCode运行和调试配置的高扩展性同时支持众多功能选择
此指南重点关注VSCode的配置,对于manim所需支持库和LaTeX的安装由于篇幅有限恕不详细给出。
本指南由Manim Kindergarten成员GZTime提供。
教程中均使用manim-kindergarten所Fork及针对性优化的manim版本。
我们将会保障最新版本的及时更新与可用性。
查阅更多教程欢迎访问由MK成员维护的manim中文教程文档。
同时欢迎在Bilibili关注我们的最新动态及相关作品!
Steps
VSCode扩展及文件夹准备
在开始配置之前,你需要完成以下工作及准备:
- 安装好VSCode
- 配置好
python
,ffmpeg
,LaTeX
,git
并安装好运行manim所必须的软件(详见其他指南) - 在合适的地方创建一个合适的文件夹,我们预计的最终文件目录将会是如下的结构:
├─ .vscode/ ├─ code/ ├─ export/ ├─ manim/ ├─ manim_old/ └─ custom_config.yml
配置过程中尽量避免使用中文路径!文件结构均可自由配置,并无统一标准,如有需求可以自行更改并配置。
克隆代码仓库
首先你需要从manim-kindergarten克隆所需的代码仓库。
在VSCode打开你的根目录,并按下CTRL + `,在当前文件夹根目录下打开终端,运行如下命令:
git clone https://github.com/3b1b/manim.git manim
git clone https://github.com/manim-kindergarten/manim.git manim_old
如果一切顺利,在你的manim_old
文件夹中将会存有老版本的manim代码(ver.MK分支),而新版本将会位于manim
文件夹中。老版本文件夹下会存在manim.py
而新版本则会存在setup.py
文件。
配置插件
你需要安装如下插件:
安装完成后根据VSCode的提示选择你的Python路径。
在确保路径正确后打开.vscode/settings.json
并插入:
"python.analysis.extraPaths": [
"manim",
"manim_old",
],
"python.languageServer": "Pylance",
配置custom_config.yml
请将directories.output
设置为当前根目录下的export
文件夹的绝对路径。
请将directories.temporary_storage
设置为当前根目录下的export/temp
文件夹的绝对路径。
其余配置请参照./manim/manimlib/default_config.yml
进行配置。
配置launch.json
这是最重要的一步,但其中的某些配置依赖于当前MK所Fork的代码,我们将会尽早将其整合后提交PR。
相关代码已经合并至3b1b/manim
,因此可以直接使用。此处我取出一部分解释其配置。
配置项
老版本配置项:
{
"name": "Preview manim_old", // manim 旧版本预览
"type": "python",
"request": "launch",
"cwd": "${workspaceFolder}/manim_old", // 设置当前工作路径
"env": {
"PYTHONPATH": "${workspaceFolder}/manim_old" // 设置Python运行环境变量
},
"program": "${workspaceFolder}/manim_old/manim.py", // 设置运行程序
"console": "integratedTerminal", // 使用vsc内置终端
"args": [
"${file}", // 当前文件路径
"-m", // 中等画质
"-p", // 启用预览
"--media_dir", // 输出文件参数
"${workspaceFolder}/export" // 输出文件路径
]
}
新版本配置项:
{
"name": "Preview manim", // manim 预览
"type": "python",
"request": "launch",
"cwd": "${workspaceFolder}/manim", // 设置当前工作路径
"env": {
"PYTHONPATH": "${workspaceFolder}/manim" // 设置Python运行环境变量
},
"program": "${workspaceFolder}/manim/manimlib/__main__.py", // 设置运行程序
"console": "integratedTerminal", // 使用vsc内置终端
"args": [
"${file}", // 当前文件路径
"--config_file", // 配置文件参数
"${workspaceFolder}/custom_config.yml" // 配置文件路径
]
}
原因详解
以下内容均已被3b1b/manim
所合并。
其中由于新版本的特殊性,在__main__.py
中添加了如下内容以确保成功启动调试。
if __name__ == '__main__':
main()
并且对config.py
进行更改使其兼容外部路径的配置文件输入,因此,对于原版本暂时没有--config_file
选项的支持。
配置文件下载
此处提供旧版本、新版本各4条配置项,对应不同的参数和功能:
- manim 预览
- manim 1080p@30 渲染
- manim 4k@60 渲染
- manim 导出最后一帧
你可以在Gist查看或下载此配置文件。
你可以在附录查看或复制此配置文件。
测试配置结果
manim
在目录/code/shaders
中创建Test.py
并写入:
from manimlib import *
class TestScene(Scene):
def construct(self):
square = Square()
square.set_fill(BLUE_E, 1)
self.add(square)
self.play(square.animate.scale(2),rate_func=there_and_back,run_time=2)
self.wait()
self.play(square.animate.set_width(5, stretch=True),run_time=3,)
self.wait()
self.play(square.animate.set_width(2),run_time=3)
self.wait()
self.wait(2)
选择Preview manim
,并按F5或绿色箭头开始调试。
manim_old
在目录/code/old
中创建Test.py
并写入:
from manimlib.imports import *
class TestScene(Scene):
def construct(self):
circle = Circle()
square = Square()
square.flip(RIGHT)
square.rotate(-3 * TAU / 8)
circle.set_fill(PINK, opacity=0.5)
self.play(ShowCreation(square))
self.play(Transform(square, circle))
self.play(FadeOut(square))
选择Preview manim_old
,并按F5或绿色箭头开始调试。
附录
launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Preview manim", // manim 预览
"type": "python",
"request": "launch",
"cwd": "${workspaceFolder}/manim", // 设置当前工作路径
"env": {
"PYTHONPATH": "${workspaceFolder}/manim" // 设置Python运行环境变量
},
"program": "${workspaceFolder}/manim/manimlib/__main__.py", // 设置运行程序
"console": "integratedTerminal", // 使用vsc内置终端
"args": [
"${file}", // 当前文件路径
"--config_file", // 配置文件参数
"${workspaceFolder}/custom_config.yml" // 配置文件路径
]
},
{
"name": "Render manim", // manim 渲染 1080p@30
"type": "python",
"request": "launch",
"cwd": "${workspaceFolder}/manim", // 设置当前工作路径
"env": {
"PYTHONPATH": "${workspaceFolder}/manim" // 设置Python运行环境变量
},
"program": "${workspaceFolder}/manim/manimlib/__main__.py", // 设置运行程序
"console": "integratedTerminal", // 使用vsc内置终端
"args": [
"${file}", // 当前文件路径
"--hd", // --hd选项 使用 1080p@30
"-w", // 写入文件
"-o", // 完成后打开
"--config_file", // 配置文件参数
"${workspaceFolder}/custom_config.yml" // 配置文件路径
]
},
{
"name": "Render manim 4k", // manim 渲染 4k@60
"type": "python",
"request": "launch",
"cwd": "${workspaceFolder}/manim", // 设置当前工作路径
"env": {
"PYTHONPATH": "${workspaceFolder}/manim" // 设置Python运行环境变量
},
"program": "${workspaceFolder}/manim/manimlib/__main__.py", // 设置运行程序
"console": "integratedTerminal", // 使用vsc内置终端
"args": [
"${file}", // 当前文件路径
"--uhd", // --uhd选项 使用 4k@60
"-w", // 写入文件
"-o", // 完成后打开
"--config_file", // 配置文件参数
"${workspaceFolder}/custom_config.yml" // 配置文件路径
]
},
{
"name": "Export manim picture", // manim 导出最后一帧 4k
"type": "python",
"request": "launch",
"cwd": "${workspaceFolder}/manim", // 设置当前工作路径
"env": {
"PYTHONPATH": "${workspaceFolder}/manim" // 设置Python运行环境变量
},
"program": "${workspaceFolder}/manim/manimlib/__main__.py", // 设置运行程序
"console": "integratedTerminal", // 使用vsc内置终端
"args": [
"${file}", // 当前文件路径
"--uhd", // --uhd选项 使用 4k@60
"-w", // 写入文件
"-o", // 完成后打开
"-s", // 跳过动画
"--config_file", // 配置文件参数
"${workspaceFolder}/custom_config.yml" // 配置文件路径
]
},
{
"name": "Preview manim_old", // manim 老版本 低画质预览
"type": "python",
"request": "launch",
"cwd": "${workspaceFolder}/manim_old", // 设置当前工作路径
"env": {
"PYTHONPATH": "${workspaceFolder}/manim_old" // 设置Python运行环境变量
},
"program": "${workspaceFolder}/manim_old/manim.py", // 设置运行程序
"console": "integratedTerminal", // 使用vsc内置终端
"args": [
"${file}", // 当前文件路径
"-m", // 中等画质
"-p", // 启用预览
"--media_dir", // 输出路径参数
"${workspaceFolder}/export" // 输出文件路径
]
},
{
"name": "Render manim_old", // manim 老版本 渲染
"type": "python",
"request": "launch",
"cwd": "${workspaceFolder}/manim_old", // 设置当前工作路径
"env": {
"PYTHONPATH": "${workspaceFolder}/manim_old" // 设置Python运行环境变量
},
"program": "${workspaceFolder}/manim_old/manim.py", // 设置运行程序
"console": "integratedTerminal", // 使用vsc内置终端
"args": [
"${file}", // 当前文件路径
"-p", //预览参数
"--media_dir", // 输出路径参数
"${workspaceFolder}/export" // 输出文件路径
]
},
{
"name": "Render 4k manim_old", // manim 老版本 渲染 4k@60
"type": "python",
"request": "launch",
"cwd": "${workspaceFolder}/manim_old", // 设置当前工作路径
"env": {
"PYTHONPATH": "${workspaceFolder}/manim_old" // 设置Python运行环境变量
},
"program": "${workspaceFolder}/manim_old/manim.py", // 设置运行程序
"console": "integratedTerminal", // 使用vsc内置终端
"args": [
"${file}", // 当前文件路径
"-r 2160,3840", // 4k设置
"-p", //预览参数
"--media_dir", // 输出路径参数
"${workspaceFolder}/export" // 输出文件路径
]
},
{
"name": "Export manim_old picture", // manim 老版本 导出最后一帧 4k
"type": "python",
"request": "launch",
"cwd": "${workspaceFolder}/manim_old", // 设置当前工作路径
"env": {
"PYTHONPATH": "${workspaceFolder}/manim_old" // 设置Python运行环境变量
},
"program": "${workspaceFolder}/manim_old/manim.py", // 设置运行程序
"console": "integratedTerminal", // 使用vsc内置终端
"args": [
"${file}", // 当前文件路径
"-s", // 跳过动画
"-r 2160,3840", // 4k设置
"-p", // 预览参数
"--media_dir", // 输出路径参数
"${workspaceFolder}/export" // 输出文件路径
]
}
]
}