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

news2025/4/12 22:14:26

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 texlive

sudo 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 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


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

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.coloradmin.cn/o/2333399.html

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

相关文章

用matplotlib生成一个炫酷的爱心

下面是结合数学方程和可视化技巧&#xff0c;生成一个炫酷的爱心效果&#xff1a; import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation # 创建画布 fig plt.figure(figsize(8, 8)) ax plt.axes(xlim(-2.5, 2.5), ylim(-3,…

【leetcode hot 100 300】最长递增子序列

错误解法&#xff1a;在每次更新db[i]时&#xff0c;如果当前nums[i]>nums[i-1]就db[i-1]1&#xff0c;否则db[i-1] class Solution {public int lengthOfLIS(int[] nums) {int n nums.length;int[] db new int[n]; // db[i]表示到i的最长严格递增子序列的长度db[0] 1;f…

oracle 12c密码长度,复杂度查看与设置

一 密码长度和复杂度 Oracle 数据库通过 PASSWORD_VERIFY_FUNCTION 来控制密码复杂度。 1.1 查看当前的密码复杂度设置 SELECT * FROM dba_profiles WHERE resource_name PASSWORD_VERIFY_FUNCTION; LIMIT表示分配给该 PROFILE 的密码验证函数名称。如果为 NULL&#xff0c;…

数据结构——哈希技术及链地址法

目录 一、哈希的定义 二、哈希冲突定义 三、构造哈希函数的方法 四、四种解决哈希冲突的方法 4.1 开放地址法 4.2 链地址法 4.3 再散列函数法 4.4 公共区溢出法 五、链地址法结构体设计 六、基本操作的实现 6.1 哈希函数 6.2 初始化 6.3 插入值 6.4 删除值 6.5 查…

【Docker】快速部署 Certbot 并为 Nginx 服务器配置 SSL/TLS 证书

【Docker】快速部署 Certbot 并为 Nginx 服务器配置 SSL/TLS 证书 引言 Certbot 是一个免费的开源工具&#xff0c;用于自动化管理和获取 SSL/TLS 证书&#xff0c;主要用于与 Let’s Encrypt 证书颁发机构交互。 步骤 Nginx 挂载 certbot 文件夹。 docker run -d \--name…

Redis下载稳定版本5.0.4

https://www.redis.net.cn/download/ Redis下载 Redis 版本号采用标准惯例:主版本号.副版本号.补丁级别,一个副版本号就标记为一个标准发行版本,例如 1.2,2.0,2.2,2.4,2.6,2.8,奇数的副版本号用来表示非标准版本,例如2.9.x发行版本是Redis 3.0标准版本的非标准发行版本…

Google Chrome下载受限制的解决方案【方法指南】

在国内使用网络时&#xff0c;部分用户在尝试访问Google Chrome官网下载谷歌浏览器时&#xff0c;常常遇到网页无法打开或文件下载失败的情况。这种下载受限制的问题多由网络访问政策或DNS解析异常导致。为了正常获取Google Chrome的最新版安装程序&#xff0c;用户需要通过一些…

《计算机名人堂》专栏介绍:先驱之路

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 &#x1f31f;引言&#xff1a;先驱之路一、出发点&#xff1a;讲述数字世界的缔…

MCP工具的配置文件格式是怎么样的?MCP教程平台推荐

MCP&#xff08;Model Context Protocol&#xff09;配置文件是AI开发中连接MCP服务器的核心文件&#xff0c;采用JSON格式定义服务参数。它广泛应用于Cursor、ChatWise等AI开发工具&#xff0c;帮助开发者快速配置本地或远程MCP服务。本文将深入解析MCP配置文件的结构、获取方…

网络安全法规与入门指南

在当今数字化时代&#xff0c;网络安全已成为保障个人隐私、企业利益和国家安全的关键领域。随着网络攻击的日益复杂和频繁&#xff0c;了解和遵守网络安全法规变得尤为重要。本文将深入探讨网络安全相关法规&#xff0c;并为想要进入这一领域的读者提供实用的入门指南。 一、…

医院访客登记如何做才能更高效?

在医院工作过的朋友&#xff0c;大概都有过这样的体验&#xff1a;一到探视时间&#xff0c;门诊大厅、病房入口就开始拥堵&#xff0c;尤其是一些管控较严的科室&#xff0c;如ICU、手术区、儿科病房&#xff0c;来访人员必须逐一登记信息。人一多&#xff0c;就容易出错、漏登…

我的Hexo自动Webhook部署方案

前言 最近我也是重新开始管理我的博客网站了&#xff0c;之前大概有了半年的时间没有写文章了。也是经过这半年的学习&#xff0c;我了解的知识更多&#xff0c;更广了。 当我开始写 Hexo 博客的时候&#xff0c;首先我得把 Markdown 文件内容拷贝到服务器上&#xff0c;然后写…

智慧医院室内导航系统架构拆解:技术选型与性能攻坚指南

本文面向医院信息化团队技术负责人及医疗IoT解决方案开发者&#xff0c;聚焦解决大规模院区导航系统的扩展性、多源数据融合及实时路径规划等技术难点&#xff0c;提供从架构到落地的完整技术路线图。 如需获取智慧医院导航导诊系统解决方案请前往文章最下方获取&#xff0c;如…

Docker:安装与部署 Nacos 的技术指南

1、简述 Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一个动态服务发现、配置管理和服务治理的综合解决方案,适用于微服务架构。 Nacos 主要功能: 服务发现与注册:支持 Dubbo、Spring Cloud 等主流微服务框架的服务发现与注册。动态配置管理:支持…

tailwindcss 4 使用的一些注意点

目录 一、tailwindcss 4 官网地址变更了 二、自定义颜色的使用方式 三、安装的时候可能的报错 一、tailwindcss 4 官网地址变更了 之前的官网地址是&#xff1a;Tailwind CSS 中文网 现在的官网地址是&#xff1a;Tailwind CSS - Rapidly build modern websites without e…

stm32工程,拷贝到另一台电脑编译,错误提示头文件找不到cannot open source input file “core_cm4.h”

提示 cannot open source input file “core_cm4.h” ,找不到 [ core_cm4.h ] 这个头文件 . 于是我在原电脑工程文件里找也没有找到这个头文件 接下来查看原电脑keil的头文件引入配置,发现只引入了工程文件下的头文件, 那么core_cm4.h到底哪里来的? (到现在我也不清楚怎…

无锡东亭无人机培训机构电话

无锡东亭无人机培训机构电话&#xff0c;随着科技的迅猛发展&#xff0c;无人机逐渐走入我们的生活和工作领域&#xff0c;成为多种行业中不可或缺的工具。而在其广泛的应用中&#xff0c;如何正确、熟练地操控无人机成为了关键。因此&#xff0c;找到一家专业的无人机培训机构…

大厂文章阅读

1.异步任务处理系统&#xff0c;如何解决业务长耗时、高并发难题&#xff1f; 1)任务失败如何处理(CAS失败也可用)&#xff1a;1.指数退避,匹配下游任务执行系统的处理能力。比如收到下游任务执行系统的流控错误&#xff0c;或者感知到任务执行成为瓶颈&#xff0c;需要指数退…

卷积神经网络 CNN 系列总结(二)---数据预处理、激活函数、梯度、损失函数、优化方法等

数据预处理 零中心化、归一化 关于数据预处理我们有3个常用的符号,数据矩阵X,假设其尺寸是[N x D](N是数据样本的数量,D是数据的维度)。 均值减法(Mean subtraction)是预处理最常用的形式。它对数据中每个独立特征减去平均值,从几何上可以理解为在每个维度上都将数据…

速学Android 16新功能:带有进度的通知类型

前言 在当前已公布的Android 16版本中新增了一系列的功能特性和API&#xff0c;如&#xff1a; 动态壁纸的内容处理&#xff0c;提供新的 content API 预测性返回更新&#xff0c;添加了finishAndRemoveTaskCallback() 和 moveTaskToBackCallback等API 健康数据共享更新&…