03. OpenAIGym/Atariインストール

「OpenAI Gym編」「ゼロから作るDeepLearing 強化学習編」でベースのプラットフォームとして「OpenAI Gym」を使用します。通称「gym」はベースは重力を持つ2D仮想空間を想定し強化学習用にカスタマイズされた情報を提供する環境です。

このGymがベースとなり様々な環境をオーバーラップインストールすることで3Dのロボット制御や複雑なゲームが強化学習用として供給されるようになっています。

【注】
ここで使用している「オーバーラップインストール」と言う用語は、ベースとなるプログラムを最初にインストールし、パッケージないしライブラリーとして別でインストールすることでベースにオーバーラップして機能が追加されて行く方式を指した造語です。

既に「OpenAI Gym編」「ゼロから作るDeepLearing 強化学習編」でインストールしていますが、後正常に動かなかったり、一部の動作が出来なかったりするケースが確認されているため再度インストール方法を纏めていきたいと思います。
なお、今回は関連オーバーラップモジュールとして「Atari」等も一緒にインストールしていきます。

★ OpenAI Gymのインストール

最初にベースとなるOpenAI Gymをインストールしていきます。
OpenAI Gymは、どのPCであっても下記 pip にてインストールは可能です。但し2023現在今までインストールしたことが無いPCに対しインストールする場合、公式ページにて紹介しているようにと、使用pythonのバージョンは3.7以上の3.*しりーずでないとエラーが発生します

pip install gym

★ OpenAI Gymの動作確認

gymをインストール後動作確認してみます。
下記プログラムはgymが持っている強化学習用環境IDの一覧を表示するプログラムとなっています。

【実施環境】
    OS      : windows11
    CPU    : AMD
    python : python3.7

【case01_gym_play_test01.py】
# coding: utf-8
# ////////////////////////////////////////////////////////////////////////////
# ///【OpenAi gym環境種類一覧】                                            ///
# ///                                                                      ///
# ///  【改訂履歴】                                                        ///
# ///    V0.00 2022/07/05 プロトタイプ                                        ///
# ////////////////////////////////////////////////////////////////////////////
if '__file__' in globals():
    import os, sys
    sys.path.append(os.path.join(os.path.dirname(__file__), "..") )
    sys.path.append(os.path.join(os.path.dirname(__file__), '..') + "//..//")

from gym import envs
import gym

for spec in envs.registry.all():
    try:
        env = gym.make(spec.id)
        print(spec.id)
    except:
        pass

# [result]
# Copy-v0
# RepeatCopy-v0
# ReversedAddition-v0
# ReversedAddition3-v0
# DuplicatedInput-v0
# Reverse-v0
# CartPole-v0
# CartPole-v1
# MountainCar-v0
# MountainCarContinuous-v0
# Pendulum-v0
# Acrobot-v1
# Blackjack-v0
# KellyCoinflip-v0
# KellyCoinflipGeneralized-v0
# FrozenLake-v0
# FrozenLake8x8-v0
# CliffWalking-v0
# NChain-v0
# Roulette-v0
# Taxi-v3
# GuessingGame-v0
# HotterColder-v0
# CubeCrash-v0
# CubeCrashSparse-v0
# CubeCrashScreenBecomesBlack-v0
# MemorizeDigits-v0

★ Atariのインストール CASE 1

OpenAi Gymの後にインストールすべきなのが「Atari」でAtari社が開発したレトロゲームをOpenAIGym環境で動かすことが出来るツールです。
「Atari」がオーバーラップインストールされることでAtari社が開発したレトロゲームが強化学習用環境に追加されるため前述の一覧数が増加します。

Gymは全ての環境でpipによるインストールが通用しますが、Atariから使用OSや使用CPUにより差が出てきます。以降は特にwindows11に対するインストール方法を示していきます。

【実施環境】
    OS      : windows11
    CPU    : AMD
    python : python3.7

【失敗するケース】

一般的にネットで良く出回っている Atari インストール手順です。

pip install gym[atari]

実際にやってみると次の黄色文字部にあるワーニングが出ますが、一応インストールが成功したかのように見えますが、実は欠陥がありどうすればよいかは次のケース実施後お話しします。

(py37) d:\VisualStudio2017\Python3.5_GPU>pip install gym[atari]
Requirement already satisfied: gym[atari] in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (0.19.0)
Requirement already satisfied: numpy>=1.18.0 in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from gym[atari]) (1.21.6)
Collecting cloudpickle<1.7.0,>=1.2.0
  Using cached cloudpickle-1.6.0-py3-none-any.whl (23 kB)
Collecting atari-py==0.2.6
  Using cached atari_py-0.2.6-cp37-cp37m-win_amd64.whl (1.8 MB)
Requirement already satisfied: opencv-python>=3. in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from gym[atari]) (4.6.0.66)
Requirement already satisfied: six in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from atari-py==0.2.6->gym[atari]) (1.16.0)
WARNING: The candidate selected for download or install is a yanked version: 'atari-py' candidate (version 0.2.6 at https://files.pythonhosted.org/packages/df/c3/f70777c0a66fa8a26cbf471c4d96e304f5cf79718ea734880b4b36bc95fd/atari_py-0.2.6-cp37-cp37m-win_amd64.whl (from https://pypi.org/simple/atari-py/))
Reason for being yanked: re-release with new wheels
Installing collected packages: cloudpickle, atari-py
  Attempting uninstall: cloudpickle
    Found existing installation: cloudpickle 2.0.0
    Uninstalling cloudpickle-2.0.0:
      Successfully uninstalled cloudpickle-2.0.0
  Attempting uninstall: atari-py
    Found existing installation: atari-py 1.2.2
    Uninstalling atari-py-1.2.2:
      Successfully uninstalled atari-py-1.2.2
Successfully installed atari-py-0.2.6 cloudpickle-1.6.0

★ Atariのインストール CASE 2

次にGitから直接インストールする方法を実際にやってみましょう。

この結果は様々な条件により結果が異なります。
【実施環境】
    OS      : windows11
    CPU    : AMD
    python : python3.7

少なくともGGE環境では下記黄色文字部にあるエラーが発生します。

(py37) d:\VisualStudio2017\Python3.5_GPU>pip install -U git+https://github.com/Kojoley/atari-py.git
Collecting git+https://github.com/Kojoley/atari-py.git
  Cloning https://github.com/Kojoley/atari-py.git to c:\users\yamin\appdata\local\temp\pip-req-build-8ljmrp8x
  Running command git clone --filter=blob:none --quiet https://github.com/Kojoley/atari-py.git 'C:\Users\yamin\AppData\Local\Temp\pip-req-build-8ljmrp8x'
  Resolved https://github.com/Kojoley/atari-py.git to commit 86a1e05c0a95e9e6233c3a413521fdb34ca8a089
  Preparing metadata (setup.py) ... done
Requirement already satisfied: numpy in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from atari-py==1.2.2) (1.21.6)
Building wheels for collected packages: atari-py
  Building wheel for atari-py (setup.py) ... error
  error: subprocess-exited-with-error

  × python setup.py bdist_wheel did not run successfully.
  │ exit code: 1
  ╰─> [75 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build\lib.win-amd64-cpython-37
      creating build\lib.win-amd64-cpython-37\atari_py
      copying atari_py\ale_python_interface.py -> build\lib.win-amd64-cpython-37\atari_py
      copying atari_py\__init__.py -> build\lib.win-amd64-cpython-37\atari_py
      creating build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\adventure.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\air_raid.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\alien.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\amidar.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\assault.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\asterix.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\asteroids.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\atlantis.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\bank_heist.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\battle_zone.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\beam_rider.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\berzerk.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\bowling.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\boxing.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\breakout.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\carnival.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\centipede.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\chopper_command.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\crazy_climber.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\defender.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\demon_attack.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\double_dunk.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\elevator_action.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\enduro.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\fishing_derby.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\freeway.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\frostbite.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\gopher.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\gravitar.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\hero.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\ice_hockey.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\jamesbond.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\journey_escape.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\kaboom.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\kangaroo.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\krull.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\kung_fu_master.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\montezuma_revenge.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\ms_pacman.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\name_this_game.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\phoenix.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\pitfall.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\pong.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\pooyan.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\private_eye.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\qbert.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\riverraid.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\road_runner.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\robotank.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\seaquest.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\skiing.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\solaris.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\space_invaders.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\star_gunner.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\tennis.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\time_pilot.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\tutankham.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\up_n_down.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\venture.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\video_pinball.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\wizard_of_wor.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\yars_revenge.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\zaxxon.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      running build_ext
      building 'ale_c' extension
      error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for atari-py
  Running setup.py clean for atari-py
Failed to build atari-py
Installing collected packages: atari-py
  Attempting uninstall: atari-py
    Found existing installation: atari-py 0.2.6
    Uninstalling atari-py-0.2.6:
      Successfully uninstalled atari-py-0.2.6
  Running setup.py install for atari-py ... error
  error: subprocess-exited-with-error

  × Running setup.py install for atari-py did not run successfully.
  │ exit code: 1
  ╰─> [77 lines of output]
      running install
      C:\Users\yamin\anaconda3\envs\py37\lib\site-packages\setuptools\command\install.py:37: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
        setuptools.SetuptoolsDeprecationWarning,
      running build
      running build_py
      creating build
      creating build\lib.win-amd64-cpython-37
      creating build\lib.win-amd64-cpython-37\atari_py
      copying atari_py\ale_python_interface.py -> build\lib.win-amd64-cpython-37\atari_py
      copying atari_py\__init__.py -> build\lib.win-amd64-cpython-37\atari_py
      creating build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\adventure.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\air_raid.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\alien.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\amidar.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\assault.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\asterix.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\asteroids.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\atlantis.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\bank_heist.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\battle_zone.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\beam_rider.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\berzerk.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\bowling.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\boxing.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\breakout.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\carnival.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\centipede.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\chopper_command.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\crazy_climber.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\defender.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\demon_attack.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\double_dunk.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\elevator_action.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\enduro.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\fishing_derby.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\freeway.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\frostbite.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\gopher.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\gravitar.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\hero.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\ice_hockey.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\jamesbond.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\journey_escape.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\kaboom.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\kangaroo.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\krull.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\kung_fu_master.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\montezuma_revenge.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\ms_pacman.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\name_this_game.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\phoenix.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\pitfall.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\pong.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\pooyan.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\private_eye.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\qbert.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\riverraid.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\road_runner.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\robotank.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\seaquest.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\skiing.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\solaris.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\space_invaders.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\star_gunner.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\tennis.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\time_pilot.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\tutankham.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\up_n_down.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\venture.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\video_pinball.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\wizard_of_wor.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\yars_revenge.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      copying atari_py\atari_roms\zaxxon.bin -> build\lib.win-amd64-cpython-37\atari_py\atari_roms
      running build_ext
      building 'ale_c' extension
      error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  Rolling back uninstall of atari-py
  Moving to c:\users\yamin\anaconda3\envs\py37\lib\site-packages\atari_py-0.2.6.dist-info\
   from c:\users\yamin\anaconda3\envs\py37\lib\site-packages\~tari_py-0.2.6.dist-info
  Moving to c:\users\yamin\anaconda3\envs\py37\lib\site-packages\atari_py\
   from c:\users\yamin\anaconda3\envs\py37\lib\site-packages\~tari_py
error: legacy-install-failure

× Encountered error while trying to install package.
╰─> atari-py

note: This is an issue with the package mentioned above, not pip.
hint: See above for output from the failure.

このエラー部分をピックアップしてみると、次のように書いてあります。

error: Microsoft Visual C++ 14.0 or greater is required.
Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/

つまり、CUDAインストール時と同じで「Atari」もインストール後 Visual C++ によってコンパイルされるために、ビルドツールが無くてビルドできなかったというエラーです。

実際このPCはCUDAをインストールするため「Visual C++ 2015 Build Tools」がインストールされているはずなのですが、それでもエラーということは別のビルドツールが必要であり、コメントが示す「https://visualstudio.microsoft.com/visual-cpp-build-tools/」へ移動してみると、このサイトは「VisualStudio2022」用(2023/05現在最新)を示しているので、ビルドツールをインストールします。

★ Visual C++ ビルドツールのインストール

VisualStudio2022 をインストールしていきます。
勿論Atariが正常にインストールされた方は以降のインストールは不要です。


① bild toolのダウンロード
https://visualstudio.microsoft.com/visual-cpp-build-tools/へ移動し「Build Toolsのダウンロード」をクリックします。CUDAで解説したように Build Tools はVisual Studioに同梱されているVC++コンパイルツールを指します。このため2023年現在「Build Tools」は最新版Visual Studio2022における Microsoft C++ Build toolsを示しています。これが2015/2017/2019で良いかはインスール時のワーニングの有無によってのみ確認可能です。

② vs_BuildTools.exeを実行
vs_BuildTools.exeを実行した後、「全てのアプリ」から「VisaulStudio2022」を探してみましょう。次に「設定」→「アプリ」→「VisualStudio Build Tools 2022」両方に追加されていればOKです。

★ Atariの再インストール CASE 2

それではケース2のgitからのインストールをもう一度やってみます。
下記のようにワーニングやエラーが出ていなえればOKです。

(py37) d:\VisualStudio2017\Python3.5_GPU>pip install -U git+https://github.com/Kojoley/atari-py.git
Collecting git+https://github.com/Kojoley/atari-py.git
  Cloning https://github.com/Kojoley/atari-py.git to c:\users\yamin\appdata\local\temp\pip-req-build-5qyo7p2u
  Running command git clone --filter=blob:none --quiet https://github.com/Kojoley/atari-py.git 'C:\Users\yamin\AppData\Local\Temp\pip-req-build-5qyo7p2u'
  Resolved https://github.com/Kojoley/atari-py.git to commit 86a1e05c0a95e9e6233c3a413521fdb34ca8a089
  Preparing metadata (setup.py) ... done
Requirement already satisfied: numpy in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from atari-py==1.2.2) (1.21.6)
Building wheels for collected packages: atari-py
  Building wheel for atari-py (setup.py) ... done
  Created wheel for atari-py: filename=atari_py-1.2.2-cp37-cp37m-win_amd64.whl size=552146 sha256=f8b603fc732202d6bd1b7678135cfa5e5cd163bcda7277187ac3f1afcdad34d3
  Stored in directory: C:\Users\yamin\AppData\Local\Temp\pip-ephem-wheel-cache-fll9atwu\wheels\c0\86\e3\29cca012bdc1e9de00a08ad390ac2998a54a094330529bca62
Successfully built atari-py
Installing collected packages: atari-py
  Attempting uninstall: atari-py
    Found existing installation: atari-py 0.2.6
    Uninstalling atari-py-0.2.6:
      Successfully uninstalled atari-py-0.2.6
Successfully installed atari-py-1.2.2

★ Atariの再インストール CASE 1

ではケース1のインストール法に戻ります。
このケース1はワーニングなのですし、「Successfully」と書かれているため続行していく方が殆どであると思いますので、ケース2に移行する方も再度試行される方も少ないと思いますが、移行進行していくと途中で不具合が発生すると最初からやり直しになるので、今のうちに手を打っておきましょう。
なお、ケース2で完了していれば以降のインストールは不要です。

(py37) d:\VisualStudio2017\Python3.5_GPU>pip install gym[atari]
Requirement already satisfied: gym[atari] in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (0.19.0)
Requirement already satisfied: numpy>=1.18.0 in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from gym[atari]) (1.21.6)
Collecting cloudpickle<1.7.0,>=1.2.0
  Using cached cloudpickle-1.6.0-py3-none-any.whl (23 kB)
Collecting atari-py==0.2.6
  Using cached atari_py-0.2.6-cp37-cp37m-win_amd64.whl (1.8 MB)
Requirement already satisfied: opencv-python>=3. in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from gym[atari]) (4.6.0.66)
Requirement already satisfied: six in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from atari-py==0.2.6->gym[atari]) (1.16.0)
WARNING: The candidate selected for download or install is a yanked version: 'atari-py' candidate (version 0.2.6 at https://files.pythonhosted.org/packages/df/c3/f70777c0a66fa8a26cbf471c4d96e304f5cf79718ea734880b4b36bc95fd/atari_py-0.2.6-cp37-cp37m-win_amd64.whl (from https://pypi.org/simple/atari-py/))
Reason for being yanked: re-release with new wheels
Installing collected packages: cloudpickle, atari-py
  Attempting uninstall: cloudpickle
    Found existing installation: cloudpickle 2.0.0
    Uninstalling cloudpickle-2.0.0:
      Successfully uninstalled cloudpickle-2.0.0
  Attempting uninstall: atari-py
    Found existing installation: atari-py 1.2.2
    Uninstalling atari-py-1.2.2:
      Successfully uninstalled atari-py-1.2.2
Successfully installed atari-py-0.2.6 cloudpickle-1.6.0

実はPyPIを使用する際、パッケージ管理者が特定バージョンを「ヤンク(yank)」できます。「yank」とは摘まみ上げるという意味で、この場合はバージョンを固定するという意味になります。
具体的にはセキュリティ ホールやインストールの破損など重大な障害があるバージョンを削除することを目的としているため、インストール時は分かりませんし、使用途中でも可視アkされない場合があるので指示に従った方が良いと思われます。

今回指し示しているpipのワーニングは、使用ホイールが開発者が意図しないバージョンであることを指しているため、親切にコメントで指し示されたホイールに変更すれば、正常なインストールになりますので、正規のバージョンをインストールします。

① 下記ワーニングが示すURLからファイルをダウンロード https://files.pythonhosted.org/packages/df/c3/f70777c0a66fa8a26cbf471c4d96e304f5cf79718ea734880b4b36bc95fd/atari_py-0.2.6-cp37-cp37m-win_amd64.whl

② 該当ホイールのインストール
ダウンロードホイールをテンポラリフォルダー移行し、そのフォルダーをコマンドプロンプトのカレントフォルダーとなるよう変更します。そして下記手順でホイールをインストールします。

(py37) d:\VisualStudio2017\Python3.5_GPU>pip install atari_py-0.2.6-cp37-cp37m-win_amd64.whl
Processing d:\visualstudio2017\python3.5_gpu\atari_py-0.2.6-cp37-cp37m-win_amd64.whl
Requirement already satisfied: numpy in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from atari-py==0.2.6) (1.21.6)
Requirement already satisfied: six in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from atari-py==0.2.6) (1.16.0)
atari-py is already installed with the same version as the provided wheel. Use --force-reinstall to force an installation of the wheel.

再度 pip でインストールしてみるとワーニングが無くなっています。

(py37) d:\VisualStudio2017\Python3.5_GPU>pip install gym[atari]
Requirement already satisfied: gym[atari] in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (0.19.0)
Requirement already satisfied: cloudpickle<1.7.0,>=1.2.0 in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from gym[atari]) (1.6.0)
Requirement already satisfied: numpy>=1.18.0 in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from gym[atari]) (1.21.6)
Requirement already satisfied: opencv-python>=3. in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from gym[atari]) (4.6.0.66)
Requirement already satisfied: atari-py==0.2.6 in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from gym[atari]) (0.2.6)
Requirement already satisfied: six in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from atari-py==0.2.6->gym[atari]) (1.16.0)

★ stable-baselines pyyaml pybullet optuna pytablewriterのインストール

OpenAI Gym関連モジュールをインストールしていきます。

pip install stable-baselines pyyaml pybullet optuna pytablewriter

★ Box2Dのインストール

以上までのインストールを終了すると、OpenAI Gymで作成されたプログラムの環境IDのみを変更すれば、強化学習処理を行うことが出来る様になります。
ところが本来Gym環境にある環境ID[BipedalWalker-v3]を起動しようとするとエラーを発生します。

【OpenAI Gym BipedalWalker-v3 Original test1】


つまり、OpenAIGymに対し前述まではAtariという別のモジュールを追加することで環境ライブラリを増やしましたが、 OpenAI Gymの環境も基本的なプラットフォームと一部のサンプル的環境のみがインストールだけで全部はインストールされていないということです。
このように2Dロボット制御などを行わせるためには「Box2D」というライブラリが必要になります。

OpenAIGymのベースやライブラリ等々のデベロッパが使用するOSがウィンドウズではないため、ウィンドウズで使用する場合手順が異なるケースが良くあります。
その代表格が「Box2D」で、ネットなどで紹介されるケースは pip で行う方法が示されますが、GGEの経験上WindowsではNGになってしまいます。


(py37) d:\VisualStudio2017\Python3.5_GPU>pip install gym[Box2D]
Requirement already satisfied: gym[Box2D] in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (0.19.0)
Requirement already satisfied: cloudpickle<1.7.0,>=1.2.0 in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from gym[Box2D]) (1.6.0)
Requirement already satisfied: numpy>=1.18.0 in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from gym[Box2D]) (1.21.6)
Requirement already satisfied: pyglet>=1.4.0 in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from gym[Box2D]) (1.5.0)
Collecting box2d-py~=2.3.5
  Using cached box2d-py-2.3.8.tar.gz (374 kB)
  Preparing metadata (setup.py) ... done
Requirement already satisfied: future in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from pyglet>=1.4.0->gym[Box2D]) (0.18.2)
Building wheels for collected packages: box2d-py
  Building wheel for box2d-py (setup.py) ... error
  error: subprocess-exited-with-error

  × python setup.py bdist_wheel did not run successfully.
  │ exit code: 1
  ╰─> [16 lines of output]
      Using setuptools (version 65.5.0).
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build\lib.win-amd64-cpython-37
      creating build\lib.win-amd64-cpython-37\Box2D
      copying library\Box2D\Box2D.py -> build\lib.win-amd64-cpython-37\Box2D
      copying library\Box2D\__init__.py -> build\lib.win-amd64-cpython-37\Box2D
      creating build\lib.win-amd64-cpython-37\Box2D\b2
      copying library\Box2D\b2\__init__.py -> build\lib.win-amd64-cpython-37\Box2D\b2
      running build_ext
      building 'Box2D._Box2D' extension
      swigging Box2D\Box2D.i to Box2D\Box2D_wrap.cpp
      swig.exe -python -c++ -IBox2D -small -O -includeall -ignoremissing -w201 -globals b2Globals -outdir library\Box2D -keyword -w511 -D_SWIG_KWARGS -o Box2D\Box2D_wrap.cpp Box2D\Box2D.i
      error: command 'swig.exe' failed: None
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for box2d-py
  Running setup.py clean for box2d-py
Failed to build box2d-py
Installing collected packages: box2d-py
  Running setup.py install for box2d-py ... error
  error: subprocess-exited-with-error

  × Running setup.py install for box2d-py did not run successfully.
  │ exit code: 1
  ╰─> [18 lines of output]
      Using setuptools (version 65.5.0).
      running install
      C:\Users\yamin\anaconda3\envs\py37\lib\site-packages\setuptools\command\install.py:37: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
        setuptools.SetuptoolsDeprecationWarning,
      running build
      running build_py
      creating build
      creating build\lib.win-amd64-cpython-37
      creating build\lib.win-amd64-cpython-37\Box2D
      copying library\Box2D\Box2D.py -> build\lib.win-amd64-cpython-37\Box2D
      copying library\Box2D\__init__.py -> build\lib.win-amd64-cpython-37\Box2D
      creating build\lib.win-amd64-cpython-37\Box2D\b2
      copying library\Box2D\b2\__init__.py -> build\lib.win-amd64-cpython-37\Box2D\b2
      running build_ext
      building 'Box2D._Box2D' extension
      swigging Box2D\Box2D.i to Box2D\Box2D_wrap.cpp
      swig.exe -python -c++ -IBox2D -small -O -includeall -ignoremissing -w201 -globals b2Globals -outdir library\Box2D -keyword -w511 -D_SWIG_KWARGS -o Box2D\Box2D_wrap.cpp Box2D\Box2D.i
      error: command 'swig.exe' failed: None
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: legacy-install-failure

× Encountered error while trying to install package.
╰─> box2d-py

note: This is an issue with the package mentioned above, not pip.
hint: See above for output fr

1つの要因としてビルドする際に使用する指定されたバージョンのホイールが見当たらない等によってビルドが失敗するためと考えられます。

このための策として、少なくともウィンドウズでは下記のようにpipを発行し単独インストールすることで完了します。

(py37) d:\VisualStudio2017\Python3.5_GPU>pip install Box2D
Requirement already satisfied: Box2D in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (2.3.10)


≪清須電脳倶楽部メインページへ戻る場合はここをクリックしてください≫
Copyright(c)2018 GGE Kiyosu Cyber Club Allrights Reserved
inserted by FC2 system