名称错误:未定义'base'。OpenAI Gym

27

[请注意,我正在使用xvfb-run -s "-screen 0 1400x900x24" jupyter notebook命令。]

我尝试在OpenAI Gym中运行基本的一组命令。

import gym
env = gym.make("CartPole-v0")
obs = env.reset()
env.render()

但我收到以下错误:

...

~/Downloads/yes/lib/python3.7/site-packages/pyglet/gl/__init__.py in <module>()
    225     else:
    226         from .carbon import CarbonConfig as Config
--> 227 del base
    228 
    229 # XXX remove

NameError: name 'base' is not defined

我该怎么做才能修复这个问题?


我有同样的问题。你找到解决方案了吗? - payne
6个回答

13

解决您的问题需要获取正确的系统依赖项和Python依赖项组合。将此代码粘贴到Colab中的单元格中并运行它以安装所有依赖项(注意使用的特定版本号)。

%%bash

# install required system dependencies
apt-get install -y xvfb x11-utils

# install required python dependencies (might need to install additional gym extras depending)
pip install gym[box2d]==0.17.* pyvirtualdisplay==0.2.* PyOpenGL==3.1.* PyOpenGL-accelerate==3.1.*

最后一步是运行以下代码块以正确初始化虚拟显示。下面的代码在后台创建一个虚拟显示器,你的Gym Envs可以连接到该显示器进行渲染。您可以根据需要调整虚拟缓冲区的大小,但在使用Xvfb时必须设置visible=False

每个会话只需要运行一次此代码即可启动显示器。

import pyvirtualdisplay


_display = pyvirtualdisplay.Display(visible=False,  # use False with Xvfb
                                    size=(1400, 900))
_ = _display.start()

如需更多详细信息,请查看以下博客文章


3
在运行您的命令后,我收到了“成功安装EasyProcess-0.3 PyOpenGL-accelerate-3.1.5 box2d-py-2.3.8 pyvirtualdisplay-0.2.5”的消息。然而,仍然会出现“NameError: name 'base' is not defined”的错误提示。 - Axel Bregnsbo
你错过了博客文章的最后一部分。这些命令也需要在Colab中执行:import pyvirtualdisplay _display = pyvirtualdisplay.Display(visible=False, size=(1400, 900)) _ = _display.start() - Axel Bregnsbo
在运行pip安装之前,我必须先运行“apt-get install swig”。但除此之外,这对我解决了问题。 - L.Lauenburg
尽管我已经粘贴了这两个单元格,但我仍然收到错误。请参见 https://imgur.com/UvnOqFI 获取屏幕截图和错误日志。 - elexhobby
顺便提一下,您需要重新启动笔记本电脑才能使它起作用。 - Vova Bilyachat

6

这对我有用。(而且我刚遇到了同样的问题)

git clone https://github.com/openai/gym.git
cd gym
pip install -e .

您也可以尝试一下,

conda install -c conda-forge pyglet
# pyglet==1.2.4?

在此之前,我使用pip安装了gym,也许这就是问题所在。

@Mikev 嗯,可能问题出现在:pip install gym - Francis QING

2

请按照以下方式更改代码

import gym
print(gym.__version__)# for me: 0.15.4
env = gym.make("CartPole-v0")
obs = env.reset()
for i in range(1000):# it's changable
    env.step(env.action_space.sample())
    env.render()# won't work in Google Colab
env.close()

2
也许是你的系统问题,请检查你的 gym 版本。请注意,在 Colab 上渲染函数无法工作,你需要使用 IPython 笔记本的技巧来显示它 - 或者保存一个视频来进行渲染。 - Ali

1
这可能适用于您:
使用以下命令卸载软件包:
pip uninstall pyglet
pip uninstall gym

然后使用以下命令安装软件包:

conda install -c conda-forge pyglet
conda install -c conda-forge gym

0

你可以尝试将glfw更新到glfw 3.3或更高版本


1
为什么?那做了什么? - Hugo Elhaj-Lahsen

-1
你可以从命令行运行该算法:
python -m spinup.run ppo --exp_name CartPole --env CartPole-v0

这里,ppo是一种近端策略优化算法,但你可以运行任何你想要的算法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接