python - 在 Windows 上的 python 中使用gym atari(0.9.5版)
问题描述
我试图在 0.9.5 版上安装gym atari 包(我特别需要这个版本),但是当我运行代码时(如果正确下载了gym,应该可以顺利运行),我收到以下错误:
AttributeError: 'AtariEnv' object has no attribute 'viewer'
当我尝试运行时出现问题gym.make()
。
有谁知道如何解决这一问题?
我在 python 3.9 上发生了同样的行为,但由于某种原因在 python 3.8 上没有(那里有一个不同的错误)。也许我错过了一些渲染库?
完整的错误信息是:
[2021-05-22 02:17:05,405] Making new env: PongNoFrameskip-v4
C:\Users\1\PycharmProjects\University Homework\venv37\lib\site-packages\gym\envs\registration.py:17: PkgResourcesDeprecationWarning: Parameters to load are deprecated. Call .resolve and .require separately.
result = entry_point.load(False)
Traceback (most recent call last):
File "C:/Users/1/PycharmProjects/University Homework/Reinforcement Learning/dqn/main.py", line 61, in <module>
env = get_env(task, seed)
File "C:\Users\1\PycharmProjects\University Homework\Reinforcement Learning\dqn\utils\gym.py", line 13, in get_env
env = gym.make(env_id)
File "C:\Users\1\PycharmProjects\University Homework\venv37\lib\site-packages\gym\envs\registration.py", line 164, in make
return registry.make(id)
File "C:\Users\1\PycharmProjects\University Homework\venv37\lib\site-packages\gym\envs\registration.py", line 122, in make
env = spec.make()
File "C:\Users\1\PycharmProjects\University Homework\venv37\lib\site-packages\gym\envs\registration.py", line 89, in make
env = cls(**self._kwargs)
File "C:\Users\1\PycharmProjects\University Homework\venv37\lib\site-packages\gym\envs\atari\atari_env.py", line 32, in __init__
self.game_path = atari_py.get_game_path(game)
File "C:\Users\1\PycharmProjects\University Homework\venv37\lib\site-packages\atari_py\games.py", line 20, in get_game_path
raise Exception('ROM is missing for %s, see https://github.com/openai/atari-py#roms for instructions' % (game_name,))
Exception: ROM is missing for pong, see https://github.com/openai/atari-py#roms for instructions
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "C:\Users\1\PycharmProjects\University Homework\venv37\lib\site-packages\gym\utils\closer.py", line 67, in close
closeable.close()
File "C:\Users\1\PycharmProjects\University Homework\venv37\lib\site-packages\gym\core.py", line 164, in close
self.render(close=True)
File "C:\Users\1\PycharmProjects\University Homework\venv37\lib\site-packages\gym\core.py", line 150, in render
return self._render(mode=mode, close=close)
File "C:\Users\1\PycharmProjects\University Homework\venv37\lib\site-packages\gym\envs\atari\atari_env.py", line 109, in _render
if self.viewer is not None:
AttributeError: 'AtariEnv' object has no attribute 'viewer'
Exception ignored in: <function Env.__del__ at 0x00000203EE2174C8>
Traceback (most recent call last):
File "C:\Users\1\PycharmProjects\University Homework\venv37\lib\site-packages\gym\core.py", line 203, in __del__
self.close()
File "C:\Users\1\PycharmProjects\University Homework\venv37\lib\site-packages\gym\core.py", line 164, in close
self.render(close=True)
File "C:\Users\1\PycharmProjects\University Homework\venv37\lib\site-packages\gym\core.py", line 150, in render
return self._render(mode=mode, close=close)
File "C:\Users\1\PycharmProjects\University Homework\venv37\lib\site-packages\gym\envs\atari\atari_env.py", line 109, in _render
if self.viewer is not None:
AttributeError: 'AtariEnv' object has no attribute 'viewer'
另外,相关代码:
if __name__ == '__main__':
# Get Atari games.
benchmark = gym.benchmark_spec('Atari40M')
# Change the index to select a different game.
task = benchmark.tasks[3]
# Run training
seed = 0 # Use a seed of zero (you may want to randomize the seed!)
env = get_env(task, seed)
并且get_env
是:
def get_env(task, seed):
env_id = task.env_id
env = gym.make(env_id)
set_global_seeds(seed)
env.seed(seed)
expt_dir = 'tmp/gym-results'
env = wrappers.Monitor(env, expt_dir, force=True)
env = wrap_deepmind(env)
return env
解决方案
该错误看起来像是找不到用于 pong 的 Atari ROM。这可能是因为由于许可问题,gym 不再自动安装 ROM。
但是现在有一个简单的解决方法:
pip install -U gym
pip install -U gym[atari,accept-rom-license]
该accept-rom-license
选项安装一个名为的包,该包autorom
提供该命令,并使用该选项AutoROM
自动运行它。--accept-rom-license
然后一切正常。
细节:
如果你在AutoROM
没有--accept-license
选项的情况下运行,这就是你得到的,所以要注意:
AutoROM will download the Atari 2600 ROMs.
They will be installed to:
[...]/site-packages/AutoROM/roms
Existing ROMs will be overwritten.
I own a license to these Atari 2600 ROMs.
I agree to not distribute these ROMs and wish to proceed: [Y/n]:
运行AutoROM --help
以获得更多选项。
推荐阅读
- javascript - 无法从服务器端获取数组
- javascript - 所以这个脚本每小时进行超过 3000 次 API 调用,我不知道为什么。我该如何解决这个问题?
- python - 如何在 Python 2.7 的单遍数组中生成多个列表?
- gps - 如何将十六进制数据转换为十进制度经纬度?
- c# - 使用计时器运行后台任务的最佳方法
- android - 如何检测用户何时在世博会中拒绝 Google Fit 许可
- r - 用字符串值替换数值
- firebase - 在云功能中将文件从 URL 上传到 Google 存储
- node.js - 在节点JS中的REST API中将json对象作为文件流上传
- tree - 这种方法是否正确“如果( postOrder )的 preOrder 和 Reverse 等于 BST 正好有一个孩子”