Windows10 に OpenAI Gym のサンプルを動作させるまでに発生したエラー対処方法の覚書

## 前提

Windows環境での詳しいOpenAI Gym 環境構築手順は、あちこちで記載されているので適当にぐぐってください。なお古いサイトでは『bash on windows』　とか 『Bash on Ubuntu on Windows』などと説明されているページが多いですが、正式名称が『Windows Subsystem for Linux 』となったので読み替えて環境構築してください。

### WSL+Ubuntu 環境が構築されていること
- Windows Subsystem for Linux(WSL) 環境が構築されている。
- WSLの上にUbuntu 16.04 がインストールされていること。

### WindowsにLinuxのGUIアプリが表示できること。
- sudo apt-get install x11-apps を実行済み。
- export DISPLAY=localhost:0.0　を実行済み。
- VcXsrv Windows X Server がインストールされている。→xeyes& で目玉がでる。

### Anaconda3 環境が構築されていること。
- Anaconda3 環境が構築されている。→ python を実行すると Python 3.6.5 となる
- conda update conda を実行済みのこと
- conda update --all を実行済みのこと

## OpenAI Gym 環境の構築

- sudo pip install gym 
- sudo pip install -U git+https://github.com/Kojoley/atari-py.git
- sudo pip install gym[atari]

を実行する。

## sudo pip xxxx でエラーが発生する

### エラー内容

~~~
sudo pip xxxx
sudo: pip: コマンドが見つかりません
または
sudo: pip: command not found
~~~

と表示される。なお、which コマンドでチェックすると

~~~
which pip
/home/username/.pyenv/shims/pip

which sudo
/usr/bin/sudo
~~~

と、ちゃんと見える。

### 対処方法

sudo したときのパスとログインユーザのパスが違う。sudo の時にパスが見えていないのでパスを引き継ぐように変更する。
/etc/sudoers ファイルを開いて、secure_pathをコメントアウトして、env_keepにPATHを追加すればよい。

~~~
Defaults    env_reset
#Defaults   secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults    env_keep += "PATH"
~~~

なお、vi /etc/sudoers とすると

"/etc/sudoers" [権限がありません]

などと表示されるので、sudo vi /etc/sudoers とする必要がある。

## pip をバージョンアップしようとするとエラーが出力される

### エラー内容

~~~
pip install -U pip
Requirement already up-to-date: pip in ./.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages (10.0.1)
distributed 1.21.8 requires msgpack, which is not installed.
~~~

### 対処方法
msgpack をインストールする。

~~~
pip install msgpack
~~~


##  sudo pip install -U git+https://github.com/Kojoley/atari-py.git でエラーが発生する

### エラー内容

~~~
unable to execute 'gcc': No such file or directory
error: command 'gcc' failed with exit status 1
~~~

### 対処方法
gcc など開発環境をインストールする。

~~~
sudo apt-get install build-essential
~~~

## sudo apt-get install python3-pip でエラーが発生する

anaconda をインストールしていればpip はインストール済なので本来は apt-get で pip のインストールは不要。

### エラー内容

~~~
E: Unable to locate package python-pip
~~~

というエラーが発生する。

### 対処方法

~~~
sudo apt-get update
~~~

 で最新化した後に

~~~
sudo apt-get install python3-pip
~~~

を実行する。

##  OpenAI Gym のサンプルでエラーが発生する
### エラー内容
https://gym.openai.com/docs/#environments

のサンプルコードを実行すると

~~~
ImportError: Library "GL" not found.
~~~

というエラーが発生する。

### 対処方法

~~~
sudo apt-get install python-opengl
~~~

を実行する。


### エラー内容

~~~
raise NoSuchDisplayException('Cannot connect to "%s"' % name)
pyglet.canvas.xlib.NoSuchDisplayException: Cannot connect to "None"
~~~

というようなエラーが出力されて画面に表示されない。

### 対処方法
Windows側でXサーバが起動されていないのでサンプルアプリの実行まえに起動しておくこと。

## インベーダゲームを動かす

https://gym.openai.com/docs/#environments

にある
env = gym.make('CartPole-v0')
を
env = gym.make('SpaceInvaders-v0')

に変更して適当な名前で保存してpythonを実行するだけです。

例えば、invaders.py　として下記ソースを保存して

~~~
import gym
env = gym.make('SpaceInvaders-v0')
env.reset()
for _ in range(1000):
    env.render()
    env.step(env.action_space.sample())
~~~

python invaders.py

と実行する。

![invaders.png](https://qiita-image-store.s3.amazonaws.com/0/255677/ea380c1b-908f-d01b-a0d0-680f33f0cee3.png)


## その他のAtariゲーム

https://gym.openai.com/envs/#atari

を参考に！