v0.19.0

日期:

2025年1月20日

主要变更

随着 Manim v0.19.0 的发布,我们在使 Manim 更易于安装方面取得了巨大进展!

此版本最大的变化之一是用 pyav 库替换了外部 ffmpeg 依赖。这意味着用户无需安装 ffmpeg 即可使用 Manim —— 他们只需 pip install manim 即可!

鉴于这一变化,我们还重写了安装文档,建议使用一个名为 uv 的新工具来安装 Manim。

注意

如果您之前通过 Homebrew、pip、Choco 或 Scoop 等方法安装了 Manim,请不要担心。这些方法仍然有效,并且没有被弃用。但是,现在推荐使用 uv 来安装 Manim。

贡献者

共有 54 人为本次发布贡献了力量。名字旁边带有“+”的人是首次贡献补丁。

  • Aarush Deshpande

  • Abulafia

  • Achille Fouilleul +

  • Benjamin Hackl

  • CJ Lee +

  • Cameron Burdgick +

  • Chin Zhe Ning

  • Christopher Hampson +

  • ChungLeeCN +

  • Eddie Ruiz +

    1. Muenkel +

  • Francisco Manríquez Novoa

  • Geoo Chi +

  • Henrik Skov Midtiby +

  • Hugo Chargois +

  • Irvanal Haq +

  • Jay Gupta +

  • Laifsyn +

  • Larry Skuse +

  • Nemo2510 +

  • Nikhil Iyer

  • Nikhila Gurusinghe +

  • Rehmatpal Singh +

  • Romit Mohane +

  • Saveliy Yusufov +

  • Sir James Clark Maxwell

  • Sophia Wisdom +

  • Tristan Schulz

  • VPC +

  • Victorien

  • Xiuyuan (Jack) Yuan +

  • alembcke

  • anagorko +

  • czuzu +

  • fogsong233 +

  • jkjkil4 +

  • modjfy +

  • nitzanbueno +

  • yang-tsao +

此版本中包含的补丁已由以下贡献者审阅。

  • Aarush Deshpande

  • Achille Fouilleul

  • Benjamin Hackl

  • Christopher Hampson

  • Eddie Ruiz

  • Francisco Manríquez Novoa

  • Henrik Skov Midtiby

  • Hugo Chargois

  • Irvanal Haq

  • Jay Gupta

  • Jérome Eertmans

  • Nemo2510

  • Nikhila Gurusinghe

  • OliverStrait

  • Saveliy Yusufov

  • Sir James Clark Maxwell

  • Tristan Schulz

  • VPC

  • Victorien

  • Xiuyuan (Jack) Yuan

  • alembcke

  • github-advanced-security[bot]

合并的拉取请求

本次发布共合并了 138 个拉取请求。

亮点

  • #3501:将外部 ffmpeg 依赖项替换为 pyav

    此更改消除了在使用 Manim 时需要将 ffmpeg 作为命令行工具的必要性。虽然 pyav 技术上在内部也使用了 ffmpeg,但 pyav 的维护者在其二进制 wheel 中分发了它。

  • #3518:创建了 HSV 颜色类,并增加了对自定义颜色空间的支持

    这扩展了 Manim 的颜色系统,并增加了对实现自定义颜色空间的支持。请参阅 HSV 的实现以获取实际示例。

  • #3930:完全重写了安装说明

    由于移除了对外部 ffmpeg 依赖的需求,我们重新编写并极大简化了安装说明。考虑到用户编写的场景实际上是小型独立 Python 项目,新说明强烈建议使用 项目和依赖管理工具 uv 来确保一致且可复现的环境。

  • #3967:增加了对 Python 3.13 的支持

    这增加了对 Python 3.13 的支持,从而将当前支持的 Python 版本范围扩展到 3.9 – 3.13。

  • #3966VGroup 现在可以使用 VMobject 可迭代对象进行初始化

    现在可以通过将可迭代对象传递给 VGroup 构造函数来创建 Mobject 组。

    my_group = VGroup(Dot() for _ in range(10))
    

重大更改

  • #3797:将 Code.styles_list 替换为 Code.get_styles_list()

    Code 类的 styles_list 属性已被类方法 Code.get_styles_list() 替换。此方法返回 Codeformatter_style 参数所有可用值的列表。

  • #3884:重命名与内置函数冲突的参数和变量

    为了避免关键字参数与内置函数重名,对用户可见的函数进行了以下两项更改:

    • ManimColor.from_hex(hex=...) 现在是 ManimColor.from_hex(hex_str=...)

    • Scene.next_section(type=...) 现在是 Scene.next_section(section_type=...)

  • #3922:从 Sector 构造函数中移除了 inner_radiusouter_radius

    要构造一个 Sector,您现在需要指定 radius(和 angle)。特别是,AnnularSector 仍然接受 inner_radiusouter_radius 参数。

  • #3964:允许 SurroundingRectangle 接受多个 Mobject

    这改变了 SurroundingRectangle 的签名,使其接受 Mobject 序列而不是单个 Mobject。因此,以前可以作为位置参数指定的其他参数现在需要作为关键字参数指定。

    SurroundingRectangle(some_mobject, RED, 0.3)  # raises error now
    SurroundingRectangle(some_mobject, color=RED, buff=0.3)  # correct usage
    
  • #4115:完全重写了 Code mobject 的实现

    这包括对该类接口的几项重大更改,以使其更加一致。有关新接口的详细说明,请参阅 Code 的文档;有关旧关键字参数更改的概述,请参阅拉取请求 #4115 的描述。

新功能

改进

优化

修复的错误

类型提示

内部改进与自动化

  • #3737:修复了构建可下载文档的操作

  • #3761:在 pre-commit 中使用 --py39-plus

  • #3777:为 ruff 格式化添加 pyproject

  • #3779:将 pre-commit 切换为使用 ruff 进行 linting

  • #3795:将 Pyupgrade 替换为 Ruff 规则

  • #3812:修复 MacOS LaTeX CI

  • #3853:在测试中将 tempconfig 更改为 config fixture

  • #3858:更新 Docker 以使用 ENV x=y 而不是 ENV x y

  • #3872:对 pytest 风格使用 ruff

  • #3873:使用 ruff 代替 flake8-simplify

  • #3877:修复 pre-commit linting

  • #3780:添加 Ruff Lint

  • #3781:在 git blame 中忽略 Ruff 格式

  • #3881:使用 ruff pydocstyle 规则标准化 docstrings

  • #3882:将 flake8-comprehensions 和 flake8-bugbear 更改为 ruff

  • #3887:修复 HSV PR 中的拼写错误

  • #3923:使用 Ruff pygrep 规则

  • #3925:在 README 上使用 Github Markdown

  • #3955:使用 subprocess 而不是 os.system

  • #3956:为 mp4 文件中的音频设置 AAC 编解码器,添加转码工具

  • #4069:在 Docker 镜像中包含 Noto 字体

  • #4102:从 Ruff 忽略规则中删除 PT004

依赖项

  • #3739:[pre-commit.ci] pre-commit 自动更新

  • #3746:将 tqdm 从 4.66.1 提升到 4.66.3

  • #3750:将 jinja2 从 3.1.3 提升到 3.1.4

  • #3776:将 requests 从 2.31.0 提升到 2.32.0

  • #3784:[pre-commit.ci] pre-commit 自动更新

  • #3794:[pre-commit.ci] pre-commit 自动更新

  • #3796:将 tornado 从 6.4 提升到 6.4.1

  • #3801:[pre-commit.ci] pre-commit 自动更新

  • #3809:[pre-commit.ci] pre-commit 自动更新

  • #3810:将 urllib3 从 2.2.1 提升到 2.2.2

  • #3823:[pre-commit.ci] pre-commit 自动更新

  • #3827:修复 docker 构建

  • #3834:[pre-commit.ci] pre-commit 自动更新

  • #3835:将 docker/build-push-action 从 5 提升到 6

  • #3841:将 certifi 从 2024.2.2 提升到 2024.7.4

  • #3844:[pre-commit.ci] pre-commit 自动更新

  • #3847:将 zipp 从 3.18.2 提升到 3.19.1

  • #3865:[pre-commit.ci] pre-commit 自动更新

  • #3880:[pre-commit.ci] pre-commit 自动更新

  • #3889:[pre-commit.ci] pre-commit 自动更新

  • #3895:锁定 poetry.lock

  • #3896:[pre-commit.ci] pre-commit 自动更新

  • #3904:[pre-commit.ci] pre-commit 自动更新

  • #3911:[pre-commit.ci] pre-commit 自动更新

  • #3918:[pre-commit.ci] pre-commit 自动更新

  • #3929:[pre-commit.ci] pre-commit 自动更新

  • #3931:将 cryptography 从 43.0.0 提升到 43.0.1

  • #3987:[pre-commit.ci] pre-commit 自动更新

  • #4023:将 tornado 从 6.4.1 提升到 6.4.2

  • #4035:[pre-commit.ci] pre-commit 自动更新

  • #4037:限制 pyav 版本