【发布时间】:2022-06-21 03:52:45
【问题描述】:
我遵循与 OpenAI Gym 完全相同的文件夹结构,但在使用 gym.make() 时仍然出现未找到属性错误。我的文件夹结构如下。
my_gym
-->examples
---MAIN_ENV
-->my_rl_gym
--->envs
---__init__
---main_env #contains a class called Myxyz as registered below
---__init__
-->setup.ipynb
以下是我在 envs 文件夹内的 __init__ 中注册的方法
from gym.envs.registration import register
register(
id='XYZ-v0',
entry_point='my_rl_gym.envs:Myxyz'
)
以下内容位于 my_rl_gym 文件夹内的__init__ 中,即在环境之外
# from my_rl_gym.envs.main_env import Myxyz
#### THIS above line is actually correct BUT gives error as No module named
#####'my_rl_gym.envs.main_env ' . Hence, I changed this to below line.
import main_env
调用make命令时出现错误
env = gym.make('XYZ-v0', **env_args)
追溯是:
----> 6 env = gym.make('XYZ-v0', **env_args)
~\anaconda3\lib\site-packages\gym\envs\registration.py in make(id, **kwargs)
674 # fmt: on
675 def make(id: str, **kwargs) -> "Env":
--> 676 return registry.make(id, **kwargs)
677
678
~\anaconda3\lib\site-packages\gym\envs\registration.py in make(self, path, **kwargs)
518 spec = self.spec(path)
519 # Construct the environment
--> 520 return spec.make(**kwargs)
521
522 def all(self):
~\anaconda3\lib\site-packages\gym\envs\registration.py in make(self, **kwargs)
137 env = self.entry_point(**_kwargs)
138 else:
--> 139 cls = load(self.entry_point)
140 env = cls(**_kwargs)
141
~\anaconda3\lib\site-packages\gym\envs\registration.py in load(name)
54 mod_name, attr_name = name.split(":")
55 mod = importlib.import_module(mod_name)
---> 56 fn = getattr(mod, attr_name)
57 return fn
58
AttributeError: module 'my_rl_gym.envs' has no attribute 'Myxyz'
这里有什么问题?文件夹目录正确,定义方式也正确。例如见https://github.com/MartinThoma/banana-gym 是因为我需要任何设置文件吗?因为如果是这样,那么我做了并得到了有问题的类型错误Getting Type error with setup file in OpenAI gym
【问题讨论】:
-
我认为你需要切换两个
__init__.py文件的内容,并且内部文件的内容为from my_rl_gym.envs.main_env import Myxyz。 -
@Sharan 感谢您的回复。但是你确定切换是正确的吗?我做到了,而且没有任何区别,而且,在每个 Gym 示例中,我看到他们在外部初始化文件中执行 register(),这也是我所做的,并且在附加的示例链接中也给出了。
-
@Sharan 您对 import 语句的看法是正确的,但正如我在问题中所说的那样,我不知道为什么,但它给出了 no module found 错误。这就是为什么我只写了简单的 import 语句,因为它们都在同一个文件夹中并且错误消失了。但我知道这是错误的,因为没有其他 GYM 示例这样做。也许解决了。到问题也会自动解决这个问题
-
你能把你的代码推送到github吗?我可以发送 PR 并进行所需的适当更改。
-
@Sharan 哦,好吧,我从来没有这样做过,而且我也不认为我会很乐意将代码放在那里。因为我正在复制一些纸质代码(已经在 github 中)以便我理解它,然后根据我的应用程序进行更改。所以,我在问题中使用了不同的符号。避免与原始纸质代码相似,因为实际上它没有任何错误。我想看看我做错了什么。你不能在这里发表评论并让我知道吗?我会根据您的建议继续进行更改。这对我来说也是一种练习。
标签: python jupyter-notebook anaconda jupyter-lab openai-gym