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

1.背景

最近调研python opencv, cuda加速矩阵/向量运算, 对于矩阵的线性变换, 秩, 转秩, 行列式变化等概概念模糊不清.
大概课本依旧是天书, 于是上B站搜索线性代数, 看到 3Blue1Brown 线性变换本质 视频, 点击观看.
惊为天人 --> 豁然开朗 --> 突然顿悟 --> 开心不已
感觉大学的线性代数课本, 是真的差.
3Blue1Brown 线性变换本质 视频动画可视化
二维向量,
三维向量,
二维向量: 缩放,位移
–>引出矩阵乘法的几何意义
–> 引出矩阵乘法 为什么是 行x列, 行 = 列, 代数计算的规定
—> 引出线性变化, 行列式变化
----> 引出逆矩阵
-----> 引出基座标变化
点积 可视化映射, 计算 --> 引出 点积作用, 求两个向量夹角

通过视频, 动画演示 二维, 三维向量变化 引出代数公式.
而大学课本, 只定义和说明矩阵和线性代数公式的计算, 没有介绍原有, 用途;
故学完就忘, 根本记不住
向量变化的几何意义.jpg
[ 3 0 0 2 ] X [ 1 1 ] 矩阵乘法几何意义 , 缩放 \begin{bmatrix} 3 & 0 \\ 0 & 2 \end{bmatrix} X \begin{bmatrix} 1 \\ 1 \end{bmatrix} 矩阵乘法几何意义, 缩放 [3002]X[11]矩阵乘法几何意义,缩放

manimgl_线性变化.jpg

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

自己也有一些 微积分,线性变化计算的想法, 也想动画可视化这些计算过程.
于是尝试安装运行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

安装依赖

# 依赖库
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 texlivesudo apt install -y texlive-full
# Note: texlive-full 安装需要极长时间, 请耐心等待

venv创建独立环境, 安装manimgl

# 更新pip
pip install --upgrade pip# 1.创建虚拟环境
python3 -m venv manimgl# 2.加载环境
source manimgl/bin/activate# 3.安装manimgl
pip3 install manimgl

运行manimgl错误: manimgl

Traceback (most recent call last):File "/home/liuj/venv/manimgl/bin/manimgl", line 5, in <module>from manimlib.__main__ import mainFile "/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 mainFile "/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


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 mainscene.run()File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/scene/scene.py", line 91, in runself.construct()File "/home/liuj/3_work/4_python-example/7_数学_科学_计算/2_manim_manimgl数学动画/manimgl/2_square_to_circle_方形变圆形.py", line 4, in constructcircle = 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_pointsself.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 wrapperif 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/manimInstalling build dependencies ... doneChecking if build backend supports build_editable ... doneGetting requirements to build editable ... donePreparing 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

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即时演绎 + 交互, 可以用于实时演示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/901577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git 学习笔记

这篇笔记记录了我在git学习中常常用到的指令&#xff0c;方便在未来进行查阅。此篇文章也会根据笔者的学习进度持续更新。 网站分享 Git 常用命令大全 Learn Git Branching 基础 $ git init //在当前位置配置一个git版本库 $ git add <file> //将文件添加至…

Dynamics365 ExportPdfTemplateExportWordTemplate两个Action调用的body构造

这两天在用ExportPdfTemplate做pdf导出功能时&#xff0c;遇到了如下问题InnerException : Microsoft.OData.ODataException: An unexpected StartArray node was found when reading from the JSON reader. A PrimitiveValue node was expected. 我的场景是使用power automate…

经典算法 判断一个图是不是树

判断一个图是不是树 问题描述 给一个以0 0结尾的整数对列表&#xff0c;除0 0外的每两个整数表示一条连接了这两个节点的边。假设节点编号不超过100000大于0。你只要判断由这些节点和边构成的图是不是树。是输出YES&#xff0c;不是输出NO。 输入样例1 6 8 5 3 5 2 6 4 5…

【嵌入式八股2】C++:STL容器与算法

1. STL常见容器及其内部实现的数据结构 序号 名称 描述 存储结构 常用方法和操作 1vector动态分配的数组顺序数组&#xff08;array&#xff09;v.push_back(), v.pop_back(), v.insert(), v.erase(), v.capacity(), v.size(), v.at(idx), v.front(), v.back()2list双向链表离…

vmcore分析锁问题实例(x86-64)

问题描述&#xff1a;系统出现panic&#xff0c;dmesg有如下打印&#xff1a; [122061.197311] task:irq/181-ice-enp state:D stack:0 pid:3134 ppid:2 flags:0x00004000 [122061.197315] Call Trace: [122061.197317] <TASK> [122061.197318] __schedule0…

在Apple Silicon上部署Spark-TTS:四大核心库的技术魔法解析!!!

在Apple Silicon上部署Spark-TTS&#xff1a;四大核心库的技术魔法解析 &#x1f680; &#xff08;M2芯片实测&#xff5c;Python 3.12.9PyTorch 2.6.0全流程解析&#xff09; 一、核心库功能全景图 &#x1f50d; 在Spark-TTS的部署过程中&#xff0c;pip install numpy li…

leetcode03 -- 武汉旅游查询系统

武汉旅游查询系统 1 界面展示 1.首页地图界面 2.查找功能 在查找框内输入查找的景点名称 查找到的景点在地图上进行定位,右侧展示景点的详细信息。 3.添加景点功能 在地图上点击某个位置,系统弹出一个输入框供用户填写景点的名称和描述。 在弹出的输入框中输入景点名…

玩机进阶教程----MTK芯片设备刷机导致的死砖修复实例解析 连电脑毫无反应 非硬件问题

在高通芯片机型中,我们可以通过短接主板测试点来激活高通芯片特有的9008底层端口来刷写救砖固件。但通常MTK芯片类的设备联机电脑即可触发深刷模式。但有些例外的情况会导致链接电脑毫无反应。遇到类似故障的友友可以参阅此博文尝试解决。 通过博文了解 1💝💝💝-----实…

09-设计模式企业场景 面试题-mk

文章目录 1.工厂(方法)模式1.1.简单工厂模式(不是设计模式,是编程习惯)1.2.工厂方法模式(企业开发中最常见)1.3.抽象工厂模式2.策略模式2.1.登录案例(工厂模式+策略模式)3.责任链设计模式4.单点登录怎么是实现的?5.权限认证是如何实现的6.上传数据的安全性你们怎么控…

BUUCTF-Web(1-20)

目录 一.SQL注入 (1)[极客大挑战 2019]EasySQL 万能密码 (7)[SUCTF 2019]EasySQL 堆叠注入 解一&#xff1a; 解二&#xff1a; (10)[强网杯 2019]随便注 堆叠注入 解一&#xff1a; 解二&#xff1a; 解三&#xff1a; (8)[极客大挑战 2019]LoveSQL 联…

软件包安装管理Gitlab

官方提供了非常详尽的系统及自动化脚本安装教程 Gitlab官网下载地址&#xff1a;https://gitlab.cn/install/ 1、安装配置 今天我们说一下包安装管理&#xff0c;这样方便我们自己更精确的制定符合我们自己需要的Gitlab仓库 配置&#xff1a;ubuntu2004(focal) 4C8G 下载程…

hadoop执行sqoop任务找不到jar

sqoop:1.4.7 hadoop:3.4.1 数据:oracel-hdfs 2025-04-15 16:57:00,850 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7 2025-04-15 16:57:00,901 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 2025-04-15 …

空地机器人在复杂动态环境下,如何高效自主导航?

随着空陆两栖机器人(AGR)在应急救援和城市巡检等领域的应用范围不断扩大&#xff0c;其在复杂动态环境中实现自主导航的挑战也日益凸显。对此香港大学王俊铭基于阿木实验室P600无人机平台自主搭建了一整套空地两栖机器人&#xff0c;使用Prometheus开源框架完成算法的仿真验证与…

MCP调用示例-GitHub仓库操作

在上一篇文章MCP核心概念和应用 ———AI 大模型的标准化工具箱里&#xff0c;我们讲述了MCP的安装&#xff0c;现在让我们试一试通过示例了解它的功能吧&#xff01; 首先确保你已经有了相应的APIKEY。 &#x1f4a1;大模型中转API推荐 ✨中转使用教程 1、点击界面上的 「Done…

zk源码—5.请求的处理过程一

大纲 1.服务器的请求处理链 (1)Leader服务器的请求处理链 一.PrepRequestProcessor请求预处理器 二.ProposalRequestProcessor事务投票处理器 三.SyncRequestProcessor事务日志处理器 四.AckRequestProcessor投票反馈处理器 五.CommitProcessor事务提交处理器 六.ToBeA…

小程序获取用户总结(全)

获取方式 目前小程序获取用户一共有3中(自己接触到的),但由于这个API一直在改,所以不确定后期是否有变动,还是要多关注官方公告。 方式一 使用wx.getUserInfo 实例: wxml 文件<button open-type="getUserInfo" bindgetuserinfo="onGetUserInfo&quo…

[LeetCode 1871] 跳跃游戏 7(Ⅶ)

题面&#xff1a; 数据范围&#xff1a; 2 ≤ s . l e n g t h ≤ 1 0 5 2 \le s.length \le 10^5 2≤s.length≤105 s [ i ] s[i] s[i] 要么是 ′ 0 ′ 0 ′0′ &#xff0c;要么是 ′ 1 ′ 1 ′1′ s [ 0 ] 0 s[0] 0 s[0]0 1 ≤ m i n J u m p ≤ m a x J u m p <…

【Linux】基础 IO(文件描述符、重定向、缓冲区)

Linux 1.理解文件2.C文件接口1.打开 写文件2.读文件 简单实现cat命令3.输出信息到显示器的方式4.stdin、stdout、stderr5.打开文件的方式 3.系统接口 IO1.传递标志位2.open、close3.write、read 4.文件描述符1.是什么&#xff1f;2.分配规则3.重定向原理4.通过dup2系统调用重…

Apache Doris SelectDB 技术能力全面解析

Apache Doris 是一款开源的 MPP 数据库&#xff0c;以其优异的分析性能著称&#xff0c;被各行各业广泛应用在实时数据分析、湖仓融合分析、日志与可观测性分析、湖仓构建等场景。Apache Doris 目前被 5000 多家中大型的企业深度应用在生产系统中&#xff0c;包含互联网、金融、…

交换机与路由器的默契配合:它们的联系与区别

交换机与路由器的默契配合&#xff1a;它们的联系与区别 一. 交换机与路由器的基本功能1.1 交换机的功能1.2 路由器的功能 二. 交换机和路由器的区别三. 交换机和路由器的联系3.1 数据转发的协作3.2 网络分段与分隔3.3 协同工作提供互联网接入 四. 交换机和路由器的联合应用场景…