python manimgl数学动画演示_微积分_线性代数原理_ubuntu安装问题[已解决]

1.背景

最近调研python opencv, cuda加速矩阵/向量运算, 对于矩阵的线性变换, 秩, 转秩, 行列式变化等概概念模糊不清.

大概课本依旧是天书, 于是上B站搜索线性代数 , 看到 3Blue1Brown 线性变换本质 视频, 点击观看.

惊为天人 --> 豁然开朗 --> 突然顿悟 --> 开心不已

感觉大学的线性代数课本, 是真的差.
3Blue1Brown 线性变换本质 视频动画可视化

二维向量,

三维向量,

二维向量: 缩放,位移

-->引出矩阵乘法的几何意义

--> 引出矩阵乘法 为什么是 行x列, 行 = 列, 代数计算的规定

---> 引出线性变化, 行列式变化

----> 引出逆矩阵

-----> 引出基座标变化

点积 可视化映射, 计算 --> 引出 点积作用, 求两个向量夹角

...

通过视频, 动画演示 二维, 三维向量变化 引出代数公式.

而大学课本, 只定义和说明矩阵和线性代数公式的计算, 没有介绍原有, 用途;

故学完就忘, 根本记不住

3 0 0 2 X 1 1 矩阵乘法几何意义 , 缩放 \begin{bmatrix} 3 & 0 \\ 0 & 2 \end{bmatrix} X \begin{bmatrix} 1 \\ 1 \end{bmatrix} 矩阵乘法几何意义, 缩放 3002X11矩阵乘法几何意义,缩放

1 1 0 1 X 1 1 矩阵乘法几何意义 , 位移 \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} X \begin{bmatrix} 1 \\ 1 \end{bmatrix} 矩阵乘法几何意义, 位移 1011X11矩阵乘法几何意义,位移

自己也有一些 微积分,线性变化计算的想法, 也想动画可视化这些计算过程.

于是尝试安装运行python manimgl

版本说明: manim数学动画制作有3个版本

  • manim: 原作者版本
  • manimgl : 通过opengl即时绘制动画, 可以通过ipython交互, 输入命令, 即时显示效果 --> 现场教学推荐
  • manimCE: 社区维护版, 原作者主要做数学视频, 没时间管理github pr请求, 由社区维护 --> 推荐版本

2.问题

测试环境1:

  • 系统: wsl ubuntu24.04
  • python 版本: 3.12

测试环境2:

  • 系统: wsl ubuntu22.04
  • python 版本: 3.10

安装依赖

shell 复制代码
# 依赖库
sudo apt install -y libcairo2-dev libpango1.0-dev libpangocairo-1.0-0 libgdk-pixbuf2.0-dev libffi-dev libssl-dev
sudo apt install -y libxml2-dev libxslt1-dev libjpeg-dev libfreetype6-dev libsdl2-dev libopenjp2-7-dev zlib1g-dev tesseract-ocr
sudo apt install -y libtesseract-dev libwebp-dev ffmpeg texlive

sudo apt install -y texlive-full
# Note: texlive-full 安装需要极长时间, 请耐心等待

venv创建独立环境, 安装manimgl

shell 复制代码
# 更新pip
pip install --upgrade pip

# 1.创建虚拟环境
python3 -m venv manimgl

# 2.加载环境
source manimgl/bin/activate

# 3.安装manimgl
pip3 install manimgl

运行manimgl错误: manimgl

log 复制代码
Traceback (most recent call last):
  File "/home/liuj/venv/manimgl/bin/manimgl", line 5, in <module>
    from manimlib.__main__ import main
  File "/home/liuj/venv/manimgl/lib/python3.12/site-packages/manimlib/__main__.py", line 4, in <module>
    from manimlib import __version__
ImportError: cannot import name '__version__' from 'manimlib' (/home/liuj/venv/manimgl/lib/python3.12/site-packages/manimlib/__init__.py)

提示说明, python3.12 与 manimgl版本不一致

3.解决过程

方法1: 尝试安装低版本manimgl --> Fail

查询manimgl版本
pip index versions manimgl

manimgl (1.7.2)

Available versions: 1.7.2, 1.7.1, 1.7.0, 1.6.1, 1.6.0, 1.5.0, 1.4.1, 1.4.0, 1.3.0, 1.2.0, 1.1.0, 1.0.0

安装低版本 1.6.1

复制代码
mkdir ~/venv; cd ~/venv

# 1.创建虚拟环境
python3 -m venv manimgl_v1.6

# 2.加载环境
source manimgl_v1.6/bin/activate

# 3.安装低版本 manimgl
pip3 install manimgl==1.6.1
运行错误1: ModuleNotFoundError
复制代码
manimgl
Traceback (most recent call last):
  File "/home/liuj/venv/manimgl_v1.6/bin/manimgl", line 5, in <module>
    from manimlib.__main__ import main
  File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/__init__.py", line 1, in <module>
    import pkg_resources
ModuleNotFoundError: No module named 'pkg_resources'

解决方法:
pip install --upgrade setuptools

再次运行 manimgl 成功

运行错误2:

gitee在线代码: 2_square_to_circle_方形变圆形.py

运行实例: manimgl 2_square_to_circle_方形变圆形.py SquareToCircle

log 复制代码
ManimGL v1.6.1
[16:29:44] INFO     Using the default configuration file, which you can modify in                                                                            config.py:265
                    `/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/default_config.yml`                                                               
           INFO     If you want to create a local configuration file, you can create a file named `custom_config.yml`, or run `manimgl --config`             config.py:266
Traceback (most recent call last):
  File "/home/liuj/venv/manimgl_v1.6/bin/manimgl", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/__main__.py", line 25, in main
    scene.run()
  File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/scene/scene.py", line 91, in run
    self.construct()
  File "/home/liuj/3_work/4_python-example/7_数学_科学_计算/2_manim_manimgl数学动画/manimgl/2_square_to_circle_方形变圆形.py", line 4, in construct
    circle = Circle()
             ^^^^^^^^
  File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/mobject/geometry.py", line 324, in __init__
    Arc.__init__(self, 0, TAU, **kwargs)
  File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/mobject/geometry.py", line 218, in __init__
    VMobject.__init__(self, **kwargs)
  File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/mobject/types/vectorized_mobject.py", line 85, in __init__
    super().__init__(**kwargs)
  File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/mobject/mobject.py", line 89, in __init__
    self.init_points()
  File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/mobject/geometry.py", line 221, in init_points
    self.set_points(Arc.create_quadratic_bezier_points(
  File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/mobject/types/vectorized_mobject.py", line 968, in wrapper
    if not np.all(self.get_points() == old_points):
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: operands could not be broadcast together with shapes (24,3) (0,3) 

错误原因:

numpy 的版本不匹配, 即numpy的版本太高, API不兼容

尝试降低numpy版本, 引入其它问题 --> 寻找其它解决方法

尝试安装manimgl 1.5.0 版本, 遇到相同问题--> 寻找其它解决方法

方法2: 尝试官网Anaconda安装方法 --> Fail

1.安装Anaconda3

中文博客安装教程: https://blog.csdn.net/qq_29225913/article/details/105347317

清华源下载: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

下载: Anaconda3-5.3.1-Linux-x86_64.sh

安装:

复制代码
bash Anaconda3-5.3.1-Linux-x86_64.sh
# 按提示输入 yes, Enter
# Note: vsocde 插件不要安装, 下载速度很慢

安装确认:

新开终端: conda -V

conda 4.5.11 --> 安装conda成功

2.conda安装manimgl教程

官网教程: https://3b1b.github.io/manim/getting_started/installation.html

复制代码
git clone https://github.com/3b1b/manim.git
cd manim
conda create -n manim python=3.8
conda activate manim
pip install -e .

pip install -e . 安装时提示错误

复制代码
Looking in indexes: https://pypi.mirrors.ustc.edu.cn/simple/
Obtaining file:///home/liuj/venv/manim
  Installing build dependencies ... done
  Checking if build backend supports build_editable ... done
  Getting requirements to build editable ... done
  Preparing editable metadata (pyproject.toml) ... done
Collecting addict (from manimgl==1.7.2)
  Using cached https://mirrors.ustc.edu.cn/pypi/packages/6a/00/b08f23b7d7e1e14ce01419a467b583edbb93c6cdb8654e54a9cc579cd61f/addict-2.4.0-py3-none-any.whl (3.8 kB)
Collecting appdirs (from manimgl==1.7.2)
  Using cached https://mirrors.ustc.edu.cn/pypi/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl (9.6 kB)
INFO: pip is looking at multiple versions of manimgl to determine which version is compatible with other requirements. This could take a while.
ERROR: Ignored the following versions that require a different python version: 0.1.0 Requires-Python >=3.13; 0.2.0 Requires-Python >=3.13; 0.2.1 Requires-Python >=3.13
ERROR: Could not find a version that satisfies the requirement audioop-lts (from manimgl) (from versions: none)
ERROR: No matching distribution found for audioop-lts

错误原因:
audioop-lts; python_version>='3.13' --> audioop-lts 依赖python版本3.13

与conda python=3.8冲突, 估计是原作者, 没有指定audioop-lts版本 --> 放弃conda方法

方法3: 降低python版本, 兼容manimgl --> OK

通过错误提示

  1. conda安装可知, manimgl 应该是在python=3.8版本验证通过
  2. python3.12 版本安装失败可知, 需要降低python版本
    故尝试降低python版本, 这里使用pyenv降低版本.
1.安装pyenv
复制代码
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer  | bash

按安装提示添加环境配置: ~/.bashrc

shell 复制代码
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"
eval "$(pyenv virtualenv-init -)"
2.pyenv安装python=3.8版本环境

查看pyenv支持版本: pyenv install list

3.8.1

3.8.2

3.8.3

3.8.19
3.8.20

3.9.0

3.9.2

安装 3.8.20 : pyenv install 3.8.20

Downloading Python-3.8.20.tar.xz...

-> https://www.python.org/ftp/python/3.8.20/Python-3.8.20.tar.xz

如果下载速度慢, 可以使用迅雷, 或开启VPN下载 Python-3.8.20.tar.xz, 拷贝到~/.pyenv/cache

复制代码
mkdir -p ~/.pyenv/cache
cp -r Python-3.8.20.tar.xz  ~/.pyenv/cache
pyenv install 3.8.20
# 等待安装成功

查看python3.8版本是否安装成功
pyenv versions

  • system (set by /home/liuj/.pyenv/version)
    3.8.20
3.pyenv切换版本, 再次安装manimgl

切换: pyenv shell 3.8.20

确认: pyenv versions

system

* 3.8.20 (set by PYENV_VERSION environment variable)

python3 -V

Python 3.8.20

创建虚拟环境, 并安装manimgl

复制代码
mkdir ~/venv; cd ~/venv

# 1.创建虚拟环境
python3 -m venv manimgl_3.8

# 2.加载环境
source manimgl_3.8/bin/activate

# 3.安装manimgl
pip3 install manimgl

运行: manimgl

ubuntu22.04成功

ubuntu24.04失败

汇总

使用两台电脑验证, 测试验证

  1. 降低manimgl版本
  2. conda安装

都遇到相同的问题.

最后只能在wsl ubuntu22.04 + python3.8 成功运行

4.总结

  1. 熟悉了python 版本管理: pyenv, conda
  2. 熟悉了python 环境管理: venv, virtualen
  3. manimgl版本是原作者更新, 测试不齐全, 建议使用manimCE 社区维护版制作动画视频
  4. windows未测试
  5. 动手能力强的, 强烈推荐使用manimgl即时演绎 + 交互, 可以用于实时演示

相关推荐
weelinking3 小时前
【产品】12_接入数据库——让数据永久保存
jvm·数据库·python·react.js·数据挖掘·前端框架·产品经理
程序大视界4 小时前
【Python系列课程】Python正则表达式(下):环视、命名分组与日志实战
开发语言·python·正则表达式
TickDB4 小时前
美股行情 API 接入避坑:REST 快照、WebSocket 推送、盘前盘后数据的边界
人工智能·python·websocket·行情数据 api
枫叶v.4 小时前
Agent 分层存储架构设计:从记忆方法到中间件选型
开发语言·python
水兵没月4 小时前
逆向实战小记——某ToB商城网站分析学习
python·网络爬虫
程序员小远5 小时前
Python自动化测试框架及工具详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
sleven fung6 小时前
MinerU与BabelDOC与KTransformers与OpenAI API库
开发语言·python·ai·langchain
小毛驴8506 小时前
spring-boot-maven-plugin,maven-compiler-plugin 功能对比
java·python·maven
萤萤七悬6 小时前
【Python笔记】AI帮实现CLI工具-使用argparse.ArgumentParser接收命令参数
开发语言·笔记·python
郑洁文7 小时前
基于Python的Web命令执行漏洞自动化检测系统
前端·python·网络安全·自动化