OpenAI Gym名称错误

29

我正在尝试在WSL上使用Python 3.5.2执行代码,使用OpenAI的著名“Gym”模块。
当我尝试运行一个环境如此处所述时,使用以下代码:

import gym
env = gym.make('CartPole-v0')
for i_episode in range(20):
    observation = env.reset()
    for t in range(100):
        env.render()
        print(observation)
        action = env.action_space.sample()
        observation, reward, done, info = env.step(action)
        if done:
            print("Episode finished after {} timesteps".format(t+1))
            break

这种情况发生:

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
  File "/home/DrHofstadter/gym/gym/core.py", line 153, in render
    return self._render(mode=mode, close=close)
  File "/home/DrHofstadter/gym/gym/core.py", line 285, in _render
    return self.env.render(mode, close)
  File "/home/DrHofstadter/gym/gym/core.py", line 153, in render
    return self._render(mode=mode, close=close)
  File "/home/DrHofstadter/gym/gym/envs/classic_control/cartpole.py", line 114, in _render
    from gym.envs.classic_control import rendering
  File "/home/DrHofstadter/gym/gym/envs/classic_control/rendering.py", line 23, in <module>
    from pyglet.gl import *
  File "/home/DrHofstadter/.local/lib/python3.5/site-packages/pyglet/gl/__init__.py", line 224, in <module>
    del base
NameError: name 'base' is not defined

这个问题类似于这个问题,没有任何内容被渲染出来。(问题中提供的gitterforum链接已经失效。)

1
你是在远程服务器上运行吗? - Benedict K.
3个回答

1
请向我们展示pyglet和gym的版本,以便我们进行比较。您可以删除所有gym,并使用pip install 'gym[all]'重新安装。此外,如果您在Colab或Jupyter上工作,您可以添加一个类似以下的显示器(我认为您正在使用笔记本电脑),您可以添加一些支持,如xvfbopengl来支持虚拟显示。
如果您使用Linux,基本上只需安装即可。
apt-get install -y xvfb python-opengl > /dev/null 2>&1
pip install gym pyvirtualdisplay > /dev/null 2>&1

之后,您必须按照以下格式更改您的代码

import gym
import numpy as np
import matplotlib.pyplot as plt
from IPython import display as ipythondisplay
from pyvirtualdisplay import Display

开始虚拟显示
display = Display(visible=0, size=(400, 300))
display.start()

现在完成移动。
env = gym.make('CartPole-v0')
for i_episode in range(20):
   observation = env.reset()
   for t in range(100):
      plt.imshow(env.render(mode='rgb_array'))# CHANGED
      ipythondisplay.clear_output(wait=True) # ADDED
      ipythondisplay.display(plt.gcf()) # ADDED
      print(observation)
      action = env.action_space.sample()
      observation, reward, done, info = env.step(action)
      if done:
         print("Episode finished after {} timesteps".format(t+1))
         break

1
这可能不是这个问题的完美答案,但这是我解决这个问题的经验。
当我在 spyder 中运行我的程序时,我遇到了同样的错误。但是当我从终端执行相同的代码时,它没有抛出任何错误。 但要确保你的区域设置已正确配置为 gym 环境。

1
请尝试。
git clone https://github.com/openai/gym.git
cd gym
pip install -e .

或者,
pip install pyglet

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