打开ai gym Nameerror

时间:2017-05-24 06:13:40

标签: python python-3.x nameerror windows-subsystem-for-linux openai-gym

我试图在WSL上使用OpenAI的着名'Gym'模块,并在python 3.5.2上执行代码。当我尝试运行环境as explained here时,使用代码:

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

问题类似于this question 什么都没有呈现。 (给出的gitterforum链接不再起作用了。)

4 个答案:

答案 0 :(得分:1)

请向我们展示pyglet 和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 :(得分:0)

这可能不是对这个问题的完美答案,但这是我解决该问题的经验。

我从spyder运行程序时遇到了相同的错误。但是当我从终端执行相同的代码时,它没有引发任何错误。 但请确保您的区域设置针对健身房环境进行了正确配置。

答案 2 :(得分:0)

请尝试

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

或者,

pip install pyglet

答案 3 :(得分:-4)

我使用的是带有python 3.5.2的Ubuntu 16.04 VM。以下是我在其上安装和运行OpenAI gym的方法。 (参考:https://github.com/openai/gym#installing-everything

sudo apt-get install cmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev libboost-all-dev libsdl2-dev swig
sudo apt-get install python3-dev python3-future
sudo pip3 install numpy
sudo pip3 install PyOpenGL
sudo pip3 install piglet
sudo pip3 install pyglet
mkdir -p ~/src
cd ~/src
git clone https://github.com/openai/gym
cd gym
python3 ./setup.py clean
sudo pip3 install -e '.[all]'

然后我在python3中通过import gym验证安装。

这是我在运行CartPole-v0演示时得到的结果。

CartPole-v0