Ubuntu系统下MuJoCo物理引擎安装配置全攻略与疑难排解
1. 为什么在Ubuntu上安装MuJoCo是个技术活如果你正在研究机器人、强化学习或者物理仿真那么MuJoCo这个名字你一定不陌生。作为目前最先进的物理引擎之一它以其高精度、高速度和开源免费自被DeepMind收购后的特性成为了学术界和工业界进行动力学仿真、算法验证的首选工具。然而和许多强大的工具一样MuJoCo的“入门仪式”——安装配置常常是新手遇到的第一道坎尤其是在Linux发行版Ubuntu上。我见过太多人包括我自己早期兴冲冲地打开终端照着几年前的教程一顿操作结果不是遇到诡异的库依赖冲突就是许可证激活失败或者编译过程卡在某个神秘的错误上。这感觉就像拿到一把精密的瑞士军刀却找不到打开它的正确方法。实际上MuJoCo的安装过程涉及几个关键环节获取许可证、下载正确的二进制包、设置环境变量、处理Python绑定以及解决那些因系统版本、Python版本、显卡驱动不同而引发的“特色问题”。这个过程本身就是对系统管理能力和问题排查能力的一次小型测试。本文将基于最新的MuJoCo 2.3.x版本和Ubuntu 22.04 LTS环境手把手带你走通整个安装流程。我不会只给你一串命令而是会解释每个步骤背后的原因告诉你哪些地方是“雷区”以及当命令不奏效时你应该朝哪个方向去排查。我们的目标不仅仅是“安装成功”更是“理解为什么这么安装”让你下次遇到类似问题能举一反三。2. 安装前的核心准备理清依赖与获取“钥匙”在动手敲命令之前做好准备工作能避免至少80%的后续麻烦。MuJoCo的安装不只是一个pip install那么简单它是一个包含底层C库和上层Python接口的混合体。2.1 系统环境检查与基础依赖安装首先确认你的Ubuntu系统架构。虽然现在绝大多数个人电脑和服务器都是x86_64架构但在一些边缘设备或特定云服务器上可能会遇到ARM架构。打开终端输入uname -m如果输出是x86_64或aarch64那么我们可以继续。MuJoCo官方为这两种主流架构都提供了预编译的二进制库。接下来更新系统包列表并安装一些编译和运行所需的底层依赖库。这些库是MuJoCo的C语言核心库正常工作的基础比如用于OpenGL渲染、数学计算和线程管理等。sudo apt update sudo apt install build-essential libgl1-mesa-dev libglfw3 libglfw3-dev libglew-dev libosmesa6-dev这里解释一下几个关键包build-essential: 包含GCC编译器等基础开发工具链。libgl1-mesa-dev和libosmesa6-dev: 提供OpenGL和OSMesa一种离屏渲染库的开发文件。OSMesa对于在没有显示器的服务器如云服务器上运行MuJoCo至关重要因为它允许进行软件渲染。libglfw3和libglfw3-dev: GLFW是一个用于创建窗口、上下文和处理输入的库MuJoCo的模拟器视图simulate和图形化查看器viewer会用到它。libglew-dev: OpenGL扩展加载库。注意如果你的Ubuntu版本较老如18.04libglfw3的包名可能略有不同。如果遇到找不到包的情况可以尝试搜索apt search libglfw来找到正确的包名。2.2 获取MuJoCo许可证与二进制包这是最关键的一步也是变化最大的一步。自DeepMind开源MuJoCo后安装流程已经简化。访问官方网站并注册前往 MuJoCo官网 。在页面右上角点击“Download”。你需要使用一个邮箱进行注册。注册并登录后你会在个人页面看到你的许可证密钥License Key一串长字符。同时页面会提供最新稳定版如2.3.6的二进制包下载链接。下载二进制包在官网下载对应你系统架构的压缩包。对于x86_64的Linux文件名通常类似mujoco-2.3.6-linux-x86_64.tar.gz。你可以直接在浏览器下载或者复制链接地址在终端使用wget命令下载到你的家目录~下。cd ~ wget https://mujoco.org/download/mujoco-2.3.6-linux-x86_64.tar.gz创建安装目录并解压按照惯例我们将MuJoCo库解压到一个固定的、易于环境变量引用的目录。通常选择~/.mujoco这个隐藏目录。mkdir -p ~/.mujoco tar -xzf mujoco-2.3.6-linux-x86_64.tar.gz -C ~/.mujoco解压后~/.mujoco目录下会有一个以版本号命名的文件夹如mujoco-2.3.6。为了方便后续引用我们可以创建一个软链接将其指向一个固定的名字mujoco。ln -sf ~/.mujoco/mujoco-2.3.6 ~/.mujoco/mujoco这样无论未来版本如何升级我们只需要更新这个软链接而无需改动环境变量。放置许可证文件将你在官网获取的许可证密钥一串字符保存为一个文件。文件必须命名为mjkey.txt并且必须放置在~/.mujoco目录以及~/.mujoco/mujoco-2.3.6/bin目录下这是很多新手忽略导致激活失败的原因。# 假设你的许可证密钥是 YOUR_LICENSE_KEY_HERE echo YOUR_LICENSE_KEY_HERE ~/.mujoco/mjkey.txt cp ~/.mujoco/mjkey.txt ~/.mujoco/mujoco-2.3.6/bin/3. 配置系统环境变量与动态链接库仅仅把文件放在磁盘上还不够我们需要告诉系统和程序去哪里找到它们。这一步的配置是否准确直接决定了后续Python包能否正常导入和运行。3.1 设置环境变量我们需要设置两个关键的环境变量MUJOCO_PY_MUJOCO_PATH和LD_LIBRARY_PATH。前者用于指引Python的mujoco-py包找到核心库后者是Linux系统用来查找共享库.so文件的路径。编辑你的shell配置文件。如果你使用的是默认的bash通常是~/.bashrc如果是zsh则是~/.zshrc。nano ~/.bashrc在文件末尾添加以下几行export MUJOCO_PY_MUJOCO_PATH$HOME/.mujoco/mujoco export LD_LIBRARY_PATH$LD_LIBRARY_PATH:$HOME/.mujoco/mujoco/binMUJOCO_PY_MUJOCO_PATH: 明确告诉mujoco-pyMuJoCo的主库目录在哪里。LD_LIBRARY_PATH: 将MuJoCo的bin目录里面存放着主要的.so库文件添加到系统的库搜索路径中。保存文件后让配置立即生效source ~/.bashrc为了验证路径是否设置正确可以打印出来看看echo $MUJOCO_PY_MUJOCO_PATH echo $LD_LIBRARY_PATH你应该能看到你刚才设置的路径。3.2 处理潜在的GLFW与OSMesa冲突这是一个非常经典的坑。MuJoCo的图形渲染可以选择使用GLFW用于有显示器的窗口模式或OSMesa用于无显示器的离屏渲染。mujoco-py在编译时会尝试自动检测并使用其中一种。但在某些系统上尤其是同时安装了多个版本GLFW或OSMesa的环境中可能会发生链接错误。一个可靠的解决方法是在安装mujoco-py之前通过环境变量显式地指定我们想要使用的OSMesa库路径即使你有显示器先确保离屏渲染可用通常更稳妥export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu这个路径是Ubuntu系统下OSMesa库的常见安装位置。将其添加到LD_LIBRARY_PATH中可以确保编译器优先找到它。4. 安装Python接口mujoco-py的编译与踩坑实录MuJoCo的核心是一个C库我们要在Python中使用它就需要mujoco-py这个Python封装。它的安装过程涉及编译C扩展是问题的高发区。4.1 创建并激活Python虚拟环境强烈建议使用虚拟环境来管理Python依赖避免与系统级或其他项目的包发生冲突。这里以venv为例python3 -m venv mujoco_env source mujoco_env/bin/activate激活后你的命令行提示符前会出现(mujoco_env)字样。4.2 安装mujoco-py及其依赖首先升级pip和setuptools到最新版这能避免很多因工具版本过旧导致的编译问题。pip install --upgrade pip setuptools wheel接下来安装mujoco-py。不要直接使用pip install mujoco-py因为这个PyPI上的版本可能不是最新的且编译选项可能不理想。我们从GitHub仓库安装pip install mujoco-py2.4,2.3指定版本范围可以确保安装与你的MuJoCo 2.3.x二进制库兼容的版本。安装命令会触发一个较长时间的编译过程。你会看到终端输出大量以running build_ext开头的日志这是它在编译C扩展模块。4.3 编译过程中的常见错误与解决方案如果一切顺利几分钟后就能安装成功。但更常见的情况是你会遇到编译错误。下面是我遇到过并总结的几个典型问题问题一fatal error: GL/glew.h: No such file or directory原因与解决缺少GLEW的开发头文件。我们在第一步安装了libglew-dev但有时路径可能不对。确保已安装如果还报错可以尝试指定头文件路径但通常不需要sudo apt install libglew-dev # 安装后重新运行 pip install问题二error: mujoco.h: No such file or directory原因与解决这是最关键的错误之一。说明mujoco-py在编译时找不到MuJoCo的核心头文件。根本原因是环境变量MUJOCO_PY_MUJOCO_PATH没有正确设置或生效。确保你已正确执行了source ~/.bashrc。在同一个终端窗口中先echo $MUJOCO_PY_MUJOCO_PATH确认路径输出正确然后再激活虚拟环境并执行安装。因为环境变量是在当前shell进程中生效的如果先激活虚拟环境再设置变量可能会无效。最彻底的方法将export MUJOCO_PY_MUJOCO_PATH...和export LD_LIBRARY_PATH...这两行也添加到虚拟环境的激活后脚本中不推荐因为污染了虚拟环境或者确保你在一个已经配置好这些环境变量的终端里工作。问题三链接错误涉及glfw或OSMesa原因与解决这就是我们之前在3.2节提前预防的问题。如果还是出现可以尝试在安装时强制指定使用OSMesapip install mujoco-py2.4,2.3 --no-binary :all:--no-binary :all:强制从源码编译有时能解决二进制包与本地环境不兼容的问题。但这会显著延长安装时间。如果错误信息明确指出是GLFW的问题你可以尝试安装另一个版本的glfw或者通过修改mujoco-py的setup.py文件来调整查找逻辑但这属于进阶操作。一个更简单粗暴的临时方案是在编译前临时移除或重命名系统的GLFW库文件迫使编译器使用我们指定的OSMesa操作前请备份。问题四Permission denied相关错误原因与解决通常发生在尝试向系统目录写入文件时。请确保你使用的是虚拟环境并且没有使用sudo pip install。在虚拟环境中所有包都会安装到环境目录下不需要root权限。5. 验证安装与运行第一个仿真程序经过一番“斗争”如果安装命令最终显示“Successfully installed ...”那么恭喜你最艰难的部分可能已经过去了。现在我们来验证安装是否真正成功。5.1 基础验证导入与创建简单模型打开Python解释器确保在激活的虚拟环境中import mujoco import mujoco.viewer import numpy as np print(fMuJoCo版本: {mujoco.__version__})如果能够成功导入并打印出版本号如2.3.6说明Python绑定安装成功。接下来我们创建一个最简单的模型——一个自由落体的球并尝试用查看器打开它。# 1. 定义XML模型字符串 xml_string mujoco worldbody light pos0 0 2/ geom typeplane size2 2 0.1 rgba.9 .9 .9 1/ body pos0 0 1 joint typefree/ geom typesphere size0.1 rgba1 0 0 1/ /body /worldbody /mujoco # 2. 加载模型和数据 model mujoco.MjModel.from_xml_string(xml_string) data mujoco.MjData(model) # 3. 使用交互式查看器 with mujoco.viewer.launch_passive(model, data) as viewer: # 模拟1000步大约10秒 for _ in range(1000): mujoco.mj_step(model, data) viewer.sync() # 更新查看器画面 time.sleep(0.01) # 控制模拟速度如果这段代码能运行弹出一个窗口或在无头服务器上不报错地运行并且你看到一个红色小球从空中落到灰色平面上那么恭喜你MuJoCo的核心功能和图形查看器都工作正常5.2 验证离屏渲染Headless Rendering对于在云服务器或没有GUI的环境中使用MuJoCo例如训练强化学习智能体离屏渲染能力至关重要。我们可以用一段不打开窗口的代码来测试import mujoco import numpy as np from PIL import Image import io # 使用同样的球体模型 model mujoco.MjModel.from_xml_string(xml_string) data mujoco.MjData(model) # 创建一个离屏渲染器 renderer mujoco.Renderer(model, height480, width640) # 模拟一步 mujoco.mj_step(model, data) # 更新渲染器相机视角 renderer.update_scene(data) # 渲染图像到字节数组 image_bytes renderer.render() # 你可以将 image_bytes 保存为图片或进行其他处理 # 例如用PIL显示如果环境支持 # img Image.fromarray(image_bytes) # img.show()如果这段代码能执行完毕而不抛出关于GLFW或显示设备的错误说明OSMesa离屏渲染配置成功。6. 高级配置与性能优化安装成功只是第一步要让MuJoCo在项目中高效运行还需要一些优化配置。6.1 针对强化学习库的兼容性设置如果你使用Stable-Baselines3、Ray RLLib等强化学习库它们内部可能会调用mujoco-py或mujoco。确保你的项目代码在导入这些库之前已经正确设置了环境变量。一个常见的做法是在你的训练脚本开头添加import os os.environ[MUJOCO_PY_MUJOCO_PATH] os.path.expanduser(~/.mujoco/mujoco) os.environ[LD_LIBRARY_PATH] os.path.expanduser(~/.mujoco/mujoco/bin) : os.environ.get(LD_LIBRARY_PATH, )这确保了即使在不同的运行环境如由调度器启动的进程中路径也是正确的。6.2 多版本MuJoCo并存管理有时你可能需要同时维护多个使用不同MuJoCo版本的项目。我的建议是使用虚拟环境进行彻底隔离。为每个项目创建独立的虚拟环境venv或conda。在每个虚拟环境中通过环境变量指向不同版本的MuJoCo目录。你可以通过创建多个软链接来实现例如~/.mujoco/mujoco-230、~/.mujoco/mujoco-220然后在不同的虚拟环境激活脚本中设置不同的MUJOCO_PY_MUJOCO_PATH。在每个虚拟环境中安装对应版本的mujoco-py。6.3 利用GPU加速渲染可选MuJoCo的物理计算本身是CPU单线程的但其可视化渲染可以利用GPU加速。这主要依赖于你的GLFW或OSMesa是否链接了支持硬件的OpenGL驱动。对于有NVIDIA显卡的本地机器确保安装了专有驱动和CUDA Toolkit非必须但有助于其他AI框架。MuJoCo会自动使用GPU进行渲染。对于云服务器如果提供了GPU实例并安装了正确的NVIDIA驱动和CUDA离屏渲染同样可以受益。你可以通过nvidia-smi命令查看GPU使用情况在运行查看器时如果GPU负载上升说明加速生效。要验证是否在使用硬件渲染可以在查看器运行时通过系统监控工具如htop看CPUnvidia-smi看GPU观察资源占用情况。7. 疑难杂症排查清单即使按照指南操作也可能遇到独特的问题。这里提供一个排查清单当遇到问题时可以按顺序检查许可证问题运行任何代码都报错Error: could not open license file。检查mjkey.txt文件是否同时存在于~/.mujoco和~/.mujoco/mujoco/bin目录文件内容是否与官网获取的密钥完全一致无多余空格或换行导入错误ImportError: cannot import name xxx from mujoco。检查mujoco和mujoco-py的版本是否匹配确保你导入的是正确的包。现在官方推荐直接导入mujoco即pip install mujoco但很多老代码用的是mujoco-py的APIimport mujoco_py。确认你安装和导入的是同一个。库未找到错误OSError: cannot open shared object file: No such file or directory。检查LD_LIBRARY_PATH环境变量是否包含MuJoCo的bin目录是否已经source了你的.bashrc尝试在终端直接echo $LD_LIBRARY_PATH确认。图形/查看器错误运行查看器时闪退、黑屏或报GLFW错误。检查系统是否安装了图形驱动如果是远程服务器是否配置了X11转发对于窗口模式尝试使用离屏渲染测试第5.2节来绕过GUI问题。尝试在调用查看器前设置环境变量MUJOCO_GLosmesa强制使用软件渲染。性能极差模拟运行非常缓慢。检查是否在虚拟机中运行某些虚拟机对OpenGL的支持很差。尝试切换到OSMesa渲染。检查模型是否过于复杂尝试用本文提供的简单球体模型测试基准性能。编译mujoco-py失败这是最复杂的一类问题。核心思路仔细阅读错误日志的最后几行错误信息通常会指明缺失的头文件或链接失败的库。通用解法确保所有系统依赖第2.1节已安装。尝试完全清理后重新安装pip uninstall mujoco-py mujoco删除~/.cache/pip目录然后重试。考虑使用--no-cache-dir和--no-binary选项进行纯净编译。整个安装过程本质上是一个系统环境配置问题。它考验的是对Linux环境变量、库依赖关系和编译工具链的理解。最让我头疼的往往不是MuJoCo本身而是系统里那些陈旧的、冲突的库文件。我的经验是保持系统更新在一个干净的新虚拟环境中开始并严格按照官方最新文档操作能避开绝大多数历史遗留的“坑”。如果某个步骤卡住别急着到处搜答案先静下心把终端报的错误信息从头到尾读一遍十有八九线索就在里面。

相关新闻

Python模块与包实战:从代码组织到打包分发的工程化指南

Python模块与包实战:从代码组织到打包分发的工程化指南

1. 项目概述:从“能用”到“会管”的Python代码组织艺术如果你已经写过一些Python脚本,处理过几个独立的数据文件,那你肯定已经接触过模块了——就是那些.py文件。但当你开始接手一个稍大点的项目,或者想把一些好用的功能分享给同…

2026/10/12 18:30:41 阅读更多 →
美赛备赛:从解题思路到获奖论文的系统性思维重塑

美赛备赛:从解题思路到获奖论文的系统性思维重塑

1. 从“解题思路”到“获奖论文”:美赛备赛的核心逻辑重塑每年一月底到二月初,全球数万支队伍都会为一个共同的目标熬夜奋战——美国大学生数学建模竞赛(MCM/ICM)。对于很多初次参赛的同学来说,拿到赛题的那一刻&#…

2026/9/29 5:01:04 阅读更多 →
用编程猫积木式编程复刻3D版CS2核心玩法:从零到一的游戏开发实战

用编程猫积木式编程复刻3D版CS2核心玩法:从零到一的游戏开发实战

大家好,我是专注于技术实战分享的博主。今天想和大家深入探讨一个非常有趣且富有挑战性的技术话题:如何从零开始,使用积木式编程工具(以编程猫为例)来复刻一个3D版本的CS2(Counter-Strike 2)游戏…

2026/10/5 18:15:41 阅读更多 →

最新新闻

Three.js加载Gltf模型并播放动画

Three.js加载Gltf模型并播放动画

老规矩:初始化相机,场景,渲染器等,这里不过多赘述,详情看上一篇文章。 从0搭建一个3D立体场景:光影与交互全解析-CSDN博客 基本使用 只要在文件中引入这个即可: const loader new GLTFLoad…

2026/10/14 9:05:48 阅读更多 →
GESP三级考试数字图案打印题解析与实现

GESP三级考试数字图案打印题解析与实现

1. 题目背景与需求分析 这道来自GESP202412三级考试的编程题目,考察的是考生对循环结构和格式化输出的掌握程度。题目要求我们根据输入的数字n,打印出特定的数字图案。这类题目在编程初学者中非常常见,它不仅能检验基础语法掌握情况&#xff…

2026/10/14 9:05:48 阅读更多 →
STM32 HAL库红外遥控解码:定时器捕获与状态机实战

STM32 HAL库红外遥控解码:定时器捕获与状态机实战

简介:这是一份面向嵌入式初学者与STM32开发者的红外遥控解码实践资源,基于HAL库实现红外信号的接收、定时器捕获与串口输出,帮助读者理解NEC等红外协议的脉冲解码流程,适合作为外设驱动入门与课程设计的参考工程。压缩包共79个文件…

2026/10/14 9:05:48 阅读更多 →
基于Web的PS5辅助管理工具:架构设计与多主机数据聚合实践

基于Web的PS5辅助管理工具:架构设计与多主机数据聚合实践

不知道从什么时候开始,主机玩家的"资产"越来越数字化了。过去是货架上一排排光碟,现在是游戏库里的几百个图标、动不动就爆的固态硬盘、以及每次开机都要等半天的下载队列。我自己就是典型的重度PS5玩家,游戏买了不少,真…

2026/10/14 9:05:48 阅读更多 →
Python数字图案打印:循环结构与格式化输出实践

Python数字图案打印:循环结构与格式化输出实践

1. 项目背景与需求解析 数字图案打印是编程初学者常见的练习题型,也是培养逻辑思维能力的绝佳途径。这道B4067题目要求我们根据输入的数字n,打印出特定的数字图案。这类题目看似简单,实则蕴含了多重编程思维训练价值。 从教学角度来看&#…

2026/10/14 9:05:48 阅读更多 →
微信小程序点餐系统开发与优化实践

微信小程序点餐系统开发与优化实践

1. 项目背景与核心价值在餐饮行业数字化转型的大趋势下,咖啡店这类高频消费场景对点餐效率的要求越来越高。传统纸质菜单人工点单的模式存在三个痛点:高峰期排队时间长、人工记录易出错、会员营销难触达。我们团队开发的这套微信小程序点餐系统&#xff…

2026/10/14 9:04:46 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →