Pybullet_envs库导入报错:AttributeError问题求助
解决pybullet_envs导入时的AttributeError问题
报错原因
这个错误是因为pybullet_envs旧版本与新版gym(0.26+)不兼容。旧版gym中gym.envs.registration.registry是带有env_specs属性的对象,而新版gym里它直接是存储环境规格的字典,原代码访问registry.env_specs自然会抛出AttributeError。
解决方案
方案一:安装兼容的gym版本
卸载当前gym,安装0.25.x系列的兼容版本:
pip uninstall gym -y pip install gym==0.25.2
这个版本和pybullet_envs的原始注册逻辑匹配,无需修改代码即可正常使用。
方案二:修改pybullet_envs的注册逻辑
找到你环境中pybullet_envs的__init__.py文件(路径为~\anaconda3\lib\site-packages\pybullet_envs\__init__.py),修改其中的register函数:
原代码:
def register(id, *args, **kvargs): if id in registry.env_specs: return else: return gym.envs.registration.register(id, *args, **kvargs)
修改为:
def register(id, *args, **kvargs): if id in registry: return else: return gym.envs.registration.register(id, *args, **kvargs)
直接判断环境ID是否在registry字典中,适配新版gym的结构。
方案三:迁移到gymnasium(新版gym)
如果想使用最新版的强化学习环境生态,可以切换到gymnasium(原gym的官方后续项目),并安装兼容的pybullet环境包:
pip install gymnasium pybullet-gymnasium
之后把代码中的import gym替换为:
import gymnasium as gym
环境名称可以直接沿用原有的InvertedPendulumBulletEnv-v0,无需额外修改。
内容的提问来源于stack exchange,提问作者Anish Kommireddy
相关产品推荐
相关产品推荐

