'Getting " AttributeError: 'ImageData' object has no attribute 'data' " in headless gym jupyter Python 2.7

I am trying to run gym in headless server and render the same in jupyter. Python version 2.7.

I have started the jupyter using xvfb-run -a -s "-screen 0 1400x900x24" jupyter notebook

Below is the Jupyte cell that I run.

import matplotlib.pyplot as plt
import gym
from IPython import display
%matplotlib inline

env = gym.make('CartPole-v0')
env.reset()

plt.imshow(env.render(mode='rgb_array'))
display.display(plt.gcf())    
display.clear_output(wait=True)
env.step(env.action_space.sample()) # take a random action

env.close()

But the error I get is as below :

AttributeError: 'ImageData' object has no attribute 'data'

enter image description here

I have searched a lot in forums but could not find a solution. Thanks in advance to help me fix this error and make me to render gym in jupyter notebook.



Solution 1:[1]

I encountered the same issue. Installing pyglet-v1.3.2 instead of v1.4.1 solved the issue for me.

Solution 2:[2]

I have python 3.7 and for my upgrading to gym 0.18.2 solved the problem (with pyglet 1.5.5)

Solution 3:[3]

For what it's worth, like @patapouf_ai I upgraded from gym 0.9.6 to gym 0.19.0 and this solved the problem. It seems the root issue is that mode=rgb_mode returned error when passed into env.render.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 David
Solution 2 patapouf_ai
Solution 3 Stan Lin