如何在Google Colab中为Godot设置LIBGL_ALWAYS_SOFTWARE=1
在Google Colab中解决Avalon基准测试的Godot OpenGL初始化错误
问题场景
在Google Colab笔记本中使用Avalon基准测试初始化AvalonEnv时,触发Godot Engine的OpenGL初始化错误,提示需设置LIBGL_ALWAYS_SOFTWARE=1启用软件渲染。尝试通过os.environ设置该环境变量后,错误仍未解决。
运行代码如下:
!git clone https://github.com/Avalon-Benchmark/avalon.git !pip install avalon-rl==1.0.0 !python -m avalon.install_godot_binary import pathlib as pathlib import shutil from avalon.agent.godot.godot_gym import AvalonEnv from avalon.agent.godot.godot_gym import GodotEnvironmentParams from avalon.agent.godot.godot_gym import TrainingProtocolChoice from avalon.datagen.env_helper import display_video from avalon.datagen.world_creation.constants import AvalonTask from avalon.datagen.world_creation.world_generator import GenerateAvalonWorldParams from avalon.datagen.world_creation.world_generator import generate_world env_params = GodotEnvironmentParams( resolution=256, training_protocol=TrainingProtocolChoice.SINGLE_TASK_FIGHT, initial_difficulty=0, ) env = AvalonEnv(env_params)
错误信息(翻译后)
Godot Engine v3.4.4.stable.avalon.e462a8744 https://godotengine.org
错误:在is_viable处初始化GLAD失败(drivers/gles3/rasterizer_gles3.cpp:141)
你的显卡驱动不支持任何兼容的OpenGL版本,请更新驱动;如果是老旧或集成GPU,请升级硬件。或者,你可以通过设置环境变量LIBGL_ALWAYS_SOFTWARE=1来强制启用软件渲染,但这会非常慢。
无效原因分析
你尝试的代码:
import os os.environ['LIBGL_ALWAYS_SOFTWARE']='1' !export | grep LIBGL_ALWAYS_SOFTWARE
无法生效的核心原因是:
os.environ仅设置当前Python进程的环境变量,而Colab中!开头的命令会在独立的子shell中执行,子shell无法继承Python进程的环境变量。!export是在子shell中临时设置变量,该变量仅对当前子shell有效,后续启动的Godot进程(可能在另一个子shell或Python调用的子进程中)无法获取。
正确解决方法
方法1:使用Colab魔法命令全局设置环境变量
在所有代码前执行%env魔法命令,该设置会对后续所有!命令和Python子进程生效:
%env LIBGL_ALWAYS_SOFTWARE=1
之后再运行你的克隆、安装和初始化代码即可。
方法2:在调用Godot相关命令前前缀环境变量
针对需要启动Godot的命令,直接在命令前添加环境变量设置,确保启动的进程能获取到:
# 安装Godot二进制时指定 !LIBGL_ALWAYS_SOFTWARE=1 python -m avalon.install_godot_binary
同时,在Python代码中初始化AvalonEnv前,确保Python进程的环境变量已设置:
import os os.environ['LIBGL_ALWAYS_SOFTWARE'] = '1' # 随后初始化Env env_params = GodotEnvironmentParams(...) env = AvalonEnv(env_params)
方法3:一次性设置全局shell环境变量
通过!echo将变量写入Colab的shell配置文件,确保所有子shell启动时自动加载:
!echo "export LIBGL_ALWAYS_SOFTWARE=1" >> ~/.bashrc !source ~/.bashrc
执行后,后续所有!命令都会自动携带该环境变量。
验证设置是否生效
执行以下命令确认环境变量已正确设置:
!echo $LIBGL_ALWAYS_SOFTWARE
输出1则表示设置成功。
内容的提问来源于stack exchange,提问作者blindeyes
相关产品推荐
相关产品推荐

